パールの初心者です。
こんなプログラムを作ってみたのですが、
@arの要素数だけ処理をしたいのですが、
処理後@arを使った配列が参照できなくなります。
理由が良くわかりません。
どなたかご教授願います。


$ar[0]=[1,2,3];
$ar[1]=[4,5,6];

print "@{$ar[0]}\n";#表示される。
for(@ar){#これが悪いみたい。
open(IN,'test.pl');
while(<IN>){
}
close(IN);
}
print "@{$ar[0]}\n";#表示されない。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

for(@ar) のループ内では、グローバル変数 $_ で@ar の内容がひとつずつ変更可能です。


このため、そのループ内で while (<IN>) を使ってしまうと、$_ の中身が<IN> の内容に変わってしまうのだと思います。

解決としては、
for(@ar) を、foreach $item (@ar) { ~のようにするか、
または、
while(<IN>) を while($line = <IN>) のようにするとかだとおもいます。

perl の暗黙の変数ってのは思いもかけないところで影響があるから厄介ですよね。
    • good
    • 0
この回答へのお礼

早速お答えありがとうございます。

ということは、$_はリストの値が代入されるのではなく、ポイントしているだけなんですね。
質問後にいろいろ試してみて、whileブロックをコメントアウトすると正常に動作するので、whileが関係している事まではわかったのですが、そういう事だったのですか。
勉強になりました。ありがとうございます。

お礼日時:2002/01/10 09:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング