とほほのperl入門(まめ知識)

トップ > とほほのperl入門 > まめ知識

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()

IPアドレスをホスト名に変換するには?

gethostbyaddr()


Copyright (C) 1997-2002 杜甫々
初版:1997年2月3日、最終更新:2002年2月24日
http://www.tohoho-web.com/wwwperl4.htm