とあるエンジニアの闇歴史帳

文字列を一文字ずつ分割する(全角半角混合) – Perl

文字列を分解し、1文字ずつ処理を行いたい。全角文字、2バイト文字が含まれるなら、Jcode.pmを用いるのがお手軽だ。「指定バイト数で自動的に改行する」で取り上げた、Jcode.pmの「jfold」メソッドを活用すれば良い。

jfoldは指定文字数分取り出してくれる機能を持つ。ここで“1”を指定しておくだけ。その後の全角・半角のチェックはJocdeが自動的に行ってくれる。混在していてももちろん大丈夫だ。
続きを読む

アルファベットを大文字または小文字に変換する(全角半角混合) – Perl

文字列内のアルファベット(英字)を、大文字または小文字に変換したい。 全角文字、半角文字が一緒になっている場合はJcode.pmを利用すれば良い。

trメソッドを用いて、単純に置換してやれば良い。置換条件に半角文字の指定を加えれば全角・半角の変換が同時に行える。半角英小文字は半角英大文字、全角英小文字は全角英大文字になる。
続きを読む

アラビア数字をローマ数字へ変換する – Perl

アラビア数字(1~9)を、ローマ数字(I~X)へ変換したい。またはその逆を行いたい。Romanモジュールを使用すれば良い。

Romanモジュールは標準ではインストールされない。CPANなどから入手しインストールする必要がある。Romanモジュールはドキュメント(英語)を見ていただくと分かる通り非常にシンプルである。arabic関数でローマ数字をアラビア数字に、roman(Roman)関数でアラビア数字をローマ数字へと変換、以上だ。
続きを読む

基数変換を行う – Perl

2進数を10進数、10進数を16進数など、基数変換には「Math::BaseCalc」モジュールを使用すると楽に行える。Math::BaseCalcモジュールは別途インストールが必要な場合があるので注意。
続きを読む

数字を三桁ずつカンマで区切る – Perl

価格の表示など、3桁毎に数字を区切りたいことがある。このような場合、どういった処理を書けば良いのだろうか? 次のような commify 関数を自分のライブラリに準備しておくとかなり重宝する。
続きを読む

特定の項目でソートする – Perl

以下のような配列がある時、2番目の項目で並べ替えがしたい。 単純に sort @array しただけではできない。

@array = ( '1,b,c'
             , '3,c,b'
             , '2,a,a'
);

ソート項目が数値の時にはorderByArrayNum、文字列の時にはorderByArrayStrをそれぞれ呼び出せば良い。配列そのものの値が変わるので、オリジナルを保存しておきたい場合には、必ずコピーを渡すこと。
続きを読む

数値の値でソートする – Perl

以下のようなコードを書くと、文字列として扱われてしまい、意図した結果にならない場合がある。

@array = ( 1, 2, 3, 4, 5, 10, 11, 12 );
foreach(sort @array){
  print ;
  print "\n"
}

続きを読む

インチ⇔ピクセル変換 – Perl

前提知識

1インチは何センチ?
1インチ=2.54cm
dpiとは?
『Dot Per Inch (dot/inch)』 の略称で、1インチに何ドット集まっているかという単位。72dpiなら、1インチ(2.54cm)に72個のドットが集まっていることになる。
ピクセルをcmに変換するには?
ピクセル/解像度(dpi) × 2.54 = cm
cmをピクセルに変換するには?
(cm × 解像度)/2.54=ピクセル
続きを読む