OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

forの中にリストを書くとその後の動作がおかしくなります。

  • 暇なときにでも
  • 質問No.195494
  • 閲覧数26
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 75% (3/4)

パールの初心者です。
こんなプログラムを作ってみたのですが、
@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";#表示されない。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル9

ベストアンサー率 53% (52/98)

for(@ar) のループ内では、グローバル変数 $_ で@ar の内容がひとつずつ変更可能です。
このため、そのループ内で while (<IN>) を使ってしまうと、$_ の中身が<IN> の内容に変わってしまうのだと思います。

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

perl の暗黙の変数ってのは思いもかけないところで影響があるから厄介ですよね。
お礼コメント
animaro

お礼率 75% (3/4)

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

ということは、$_はリストの値が代入されるのではなく、ポイントしているだけなんですね。
質問後にいろいろ試してみて、whileブロックをコメントアウトすると正常に動作するので、whileが関係している事まではわかったのですが、そういう事だったのですか。
勉強になりました。ありがとうございます。
投稿日時 - 2002-01-10 09:00:03
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ