文字列を分解し、1文字ずつ処理を行いたい。全角文字、2バイト文字が含まれるなら、Jcode.pmを用いるのがお手軽だ。「指定バイト数で自動的に改行する」で取り上げた、Jcode.pmの「jfold」メソッドを活用すれば良い。
jfoldは指定文字数分取り出してくれる機能を持つ。ここで“1”を指定しておくだけ。その後の全角・半角のチェックはJocdeが自動的に行ってくれる。混在していてももちろん大丈夫だ。
続きを読む
文字列を分解し、1文字ずつ処理を行いたい。全角文字、2バイト文字が含まれるなら、Jcode.pmを用いるのがお手軽だ。「指定バイト数で自動的に改行する」で取り上げた、Jcode.pmの「jfold」メソッドを活用すれば良い。
jfoldは指定文字数分取り出してくれる機能を持つ。ここで“1”を指定しておくだけ。その後の全角・半角のチェックはJocdeが自動的に行ってくれる。混在していてももちろん大丈夫だ。
続きを読む
文字列内のアルファベット(英字)を、大文字または小文字に変換したい。 全角文字、半角文字が一緒になっている場合はJcode.pmを利用すれば良い。
trメソッドを用いて、単純に置換してやれば良い。置換条件に半角文字の指定を加えれば全角・半角の変換が同時に行える。半角英小文字は半角英大文字、全角英小文字は全角英大文字になる。
続きを読む
文字列内のアルファベット(英字)を、大文字または小文字に変換したい。 標準の「uc」「lc」関数を使用すれば良い。
それぞれ次のような意味を持っている。
アラビア数字(1~9)を、ローマ数字(I~X)へ変換したい。またはその逆を行いたい。Romanモジュールを使用すれば良い。
Romanモジュールは標準ではインストールされない。CPANなどから入手しインストールする必要がある。Romanモジュールはドキュメント(英語)を見ていただくと分かる通り非常にシンプルである。arabic関数でローマ数字をアラビア数字に、roman(Roman)関数でアラビア数字をローマ数字へと変換、以上だ。
続きを読む
文字列を分解し、1文字ずつ処理を行いたい。半角、1バイト文字のみ(英数字など)だけなら、標準のsplit関数を用いれば良い。 splitの分割条件で何も指定しないと、1byteずつ分割してくれる。
続きを読む
2進数を10進数、10進数を16進数など、基数変換には「Math::BaseCalc」モジュールを使用すると楽に行える。Math::BaseCalcモジュールは別途インストールが必要な場合があるので注意。
続きを読む
配列(リスト)を順不同に並べ替えたい。 トランプで言う「シャッフル」、アルゴリズム的な用語を使うと「ランダムな順列」に該当する。
次のようなプログラムを記述すれば良い。
続きを読む
価格の表示など、3桁毎に数字を区切りたいことがある。このような場合、どういった処理を書けば良いのだろうか? 次のような commify 関数を自分のライブラリに準備しておくとかなり重宝する。
続きを読む
以下のような配列がある時、2番目の項目で並べ替えがしたい。 単純に sort @array
しただけではできない。
@array = ( '1,b,c'
, '3,c,b'
, '2,a,a'
);
ソート項目が数値の時にはorderByArrayNum、文字列の時にはorderByArrayStrをそれぞれ呼び出せば良い。配列そのものの値が変わるので、オリジナルを保存しておきたい場合には、必ずコピーを渡すこと。
続きを読む
以下のようなコードを書くと、文字列として扱われてしまい、意図した結果にならない場合がある。
@array = ( 1, 2, 3, 4, 5, 10, 11, 12 );
foreach(sort @array){
print ;
print "\n"
}
あるリストから、希望する条件に一致した値だけを取り出したい場合がある。for,while,foreachなどのループを使う方法以外に、効率の良いやり方が知りたい。
続きを読む