とほほのperl入門(まめ知識)
- Perl5では"..."の中に@を使えない
- perlで日本語を扱うには
- 時間が9時間ずれる場合
- サポートされていないかもしれない関数
- flock()の間違った使い方
- 簡単なHTTPクライアントを実現するには?
- IPアドレスをホスト名に変換するには?
Perl5では"..."の中に@を使えない
perl4.Xからperl5.Xにバージョンがアップして、一部互換性が損なわれた部分があります。最もよく目にするのは、$mailto = "foo@xxx.yyy.zzz"; のように、"..." の中に文字としての @ を記述することができなくなったことです。"\@" とするか、'@' で記述するようにします。
perlで日本語を扱うには
シフトJISでperlスクリプトを記述する場合、「表示」が「侮ヲ」のように文字化けすることがあります。これは、漢字コードの2バイト目がバックスラッシュ( \ )のコードと重複する文字を用いた時に発生します。"表\示" のように、文字化けする個所の前後にバックスラッシュ( \ )を余分に挿入することで回避できます。
perlで漢字コードの変換を行うには、jcode というライブラリを用いると便利です。漢字コードを変換するには次のように使用します。
require "jcode.pl"; $xx = "漢字"; &jcode'convert(*xx, "euc");
2バイト文字を扱う際は、一度EUCに変換してから処理すると、1バイト目も2バイト目も0x80-0xffの間なので楽です。シフトJISの場合は、1バイト目は0x80~0xffの間ですが、2バイト目は通常のASCIIコードと重複する値になるのでで、注意が必要です。例えば、$xx = "テスト"; $xx =~ s/e/E/g; なんてことをやると、$xx の値は "ウスト" になってしまいます。
時間が9時間ずれる場合
海外のサーバーを利用している時など、perlが処理している時刻が9時間ずれてしまうことがあります。その時は、$ENV{'TZ'} = "JST-9"; のように、タイムゾーンを設定してやることで、回避できることがあります。
サポートされていないかもしれない関数
flock()などの関数はOSによってサポートされていたりいなかったりします。サポートされていない関数を呼び出すと、通常その場でプログラムが終了してしまいますが、evalを用いることで回避することができます。詳しくは eval を参照してください。
flock()の間違った使い方
flock()を用いてファイルをロックする場合、よく次のようなコーディングをしていまいますが、これは2つの誤りを含んでいます。詳しくは flock()を参照してください。
open(OUT, "> datafile.txt"); flock(OUT, 2); print OUT "...."; flock(OUT, 8); close(OUT);
簡単なHTTPクライアントを実現するには?
→ socket()