perlの配列について

[上に] [前に] [次に]
ちゅー太 1998/03/13(金) 15:30:06
 下のプログラムなんですが、3行目のコメントを外さないとエラーになるんです。
 なぜなんですか?


{
&func;
# $a = $data[0];
print "Content-type: text/html\n\n";
print "@data";
}

sub func
{
$data[0] = "abcdefg\n";
$data[1] = "hijklmn\n";
}

miyasiro 1998/03/13(金) 21:59:22
面白いですね。perl4 では問題なく、perl5 でのみエラーになります。この場合に限らず、未定義配列をダブルクオートの内部で使うとperl5 がエラーにしてしまう理由をワタシも知りたいです。

エラーの原因は、@data は(配列ではないようなので)、文字列として出力するには \ を付けろ!ということです。また、このエラーは実行時エラーではなく、コンパイルエラーなので、単純にソースコード上の
 print "@data";
前に @data は配列だよ!と教えてやる必要があるようです。だから、
 $a = $data[0];
でもいいし、
 @data;
だけでもOKです( -w で警告は出ますが)。
 defined @data && print "@data";
でも大丈夫ですが、
 print "@data" if defined @data;
ではダメでした。(なんか気に入らないなぁ…)
(perl5 のラクダ本を買わなきゃいけないのかなぁ…)

miyasiro 1998/03/13(金) 22:20:04
書き忘れです。
このあいだ perl4 と perl5 での @ の取り扱いの違いを知ってから、perl4 用に書かれた
 print "To: someone@somewhere.com\n";
のようなスクリプトが実行されるのを防ぐための緊急避難的な措置なのかなぁ、とも思っているのですが、ご存知の方がいらしゃいましたら、ぜひ教えて下さい。

[上に] [前に] [次に]