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

とほほのWWW入門 > とほほのperl入門 > まめ知識
1998年8月12日版

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) 1996-1999 とほほ
http://wakusei.cplaza.ne.jp/twn/wwwperl4.htm