perl4.Xからperl5.Xにバージョンがアップして、一部互換性が損なわれた部分があります。最もよく目にするのは、$mailto = "foo@xxx.yyy.zzz"; のように、"..." の中に文字としての @ を記述することができなくなったことです。"\@" とするか、'@' で記述するようにします。
シフト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 の値は "ウスト" になってしまいます。
海外のサーバーを利用している時など、perlが処理している時刻が9時間ずれてしまうことがあります。その時は、$ENV{'TZ'} = "JST-9"; のように、タイムゾーンを設定してやることで、回避できることがあります。
flock()などの関数はOSによってサポートされていたりいなかったりします。サポートされていない関数を呼び出すと、通常その場でプログラムが終了してしまいますが、evalを用いることで回避することができます。詳しくは eval を参照してください。
flock()を用いてファイルをロックする場合、よく次のようなコーディングをしていまいますが、これは2つの誤りを含んでいます。詳しくは flock()を参照してください。
open(OUT, "> datafile.txt"); flock(OUT, 2); print OUT "...."; flock(OUT, 8); close(OUT);
→ socket()