Perl 4 と Perl 5 の主な差異をまとめてみました。詳細はソースのコメントを参照してください。
# (1) ライブラリ(.pl)よりモジュール(.pm)の使用が推奨されている use Jcode; # Jcode.pm を読み込む # (2) "..." の中に @ を書くときは \@ とする $mail = "zoo\@xxx.yyy.zzz"; # (3) サブルーチンに & をつける必要が無い func("私のメールアドレスは $mail です。"): sub func { # (4) local に加えて my も使用できる my($msg) = @_; # (5) パッケージ名の後ろはコロンコロン(::) # (6) 参照渡しには参照(\...)を用いることが推奨されている Jcode::convert(\$msg, "sjis"); print "[[$msg]]\n"; }
# (1) モジュール(.pm)はサポートされていない require "jcode.pl"; # (2) "..." の中に @ を直接書ける $mail = "zoo\@xxx.yyy.zzz"; # (3) サブルーチンに & をつける必要がある &func("私のメールアドレスは $mail です。"): sub func { # (4) my は使えない。local を使う。 local($msg) = @_; # (5) パッケージ名の後ろはシングルクォート(') # (6) 参照渡しには型グロブ(*...)を用いる &jcode'convert(*msg, "sjis"); print "[[$msg]]\n"; }
Windows 上の ActivePerl では \ をフォルダとみなしますが、UNIX 上の Perl では \ をフォルダとはみなさないという仕組みを利用して、現在スクリプトが動作しているプラットフォームが Windows 系なのか、UNIX系なのかを判断することができます。
if (-d "\\") { print "Windows\n"; } else { print "UNIX\n"; }
eval は {...} の間を Perl の文章として実行します。内部で致命的なエラーが発生した場合、通常なら Perl の処理が中断してしまいますが、eval で実行している文であれば、特殊変数 $@ にエラーメッセージを設定して処理を続けます。これを利用して、flock() など、プラットフォームによってサポートされていない関数を調べることができます。
open(IN, "xx"); eval { flock(IN, 2); }; if ($@) { print "flock()はサポートされていません。"; } close(IN);
Windows で Perl のプログラミングを行う際に必要となる、コマンドプロンプト(MS-DOSプロンプト)の使い方についてちょっとだけ説明します。
コマンドプロンプトは、[スタート]-[プログラム] または [スタート]-[(すべての)プログラム]-[アクセサリ] の中に、「コマンドプロンプト」や「MS-DOSプロンプト」から起動します。
C:\> のようなものを プロンプト と呼びます。英語のプロンプト(prompt)には「(入力を)促すもの」という意味があります。プロンプトには通常、自分が現在参照しているフォルダ(カレントフォルダ)が表示されます。
C:\HomePage>
フォルダを移動するには cd(Change Directory)コマンドを用います。
C:\HomePage>cd \ ← トップフォルダに移動する C:\>cd Windows ← Windowsフォルダに移動する C:\WINDOWS>cd .. ← ひとつ上のフォルダに移動する C:\>D: ← D:ドライブに移動する
ファイルの一覧を表示するには dir(Directory)コマンドを用います。
C:\HomePage>dir ← ファイルの一覧を表示する ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 9C80-39ED です C:\HomePage のディレクトリ 2002/11/16 21:15 <DIR> . 2002/11/16 21:15 <DIR> .. 2002/11/16 21:15 1,234 index.htm 2002/11/16 21:15 823 test.pl