プログラミング初心者です。タスクは、文字列から特定のデータを抽出することであり、次のようにコードを記述することにしました -
while ($line =<IN>) {
chomp $line;
@tmp=(split /\t/, $line);
next if ($tmp[0] !~ /ch/);
@tgt1=@tmp[8..11];
@tgt2=@tmp[12..14];
@tgt3=@tmp[15..17];
@tgt4=@tmp[18..21];
foreach (1..4) {
print @tgt($_), "\n";
}
@tgt($_)
と解釈されると思っていまし@tgt1, @tgt2, @tgt3, @tgt4
たが、それでもグローバル シンボルであるエラー メッセージが表示されます@tgt
(@tgt1、@tgt2、@tgt3、@tgt4` が宣言されています)。
Q1. foreach ループを誤解していませんか?
Q2. なぜ perl は@tgt($_)
@tgt1 や @tgt2 などを認識できなかったのでしょうか?
Q2. 経験上、これはおそらく変数に名前を付ける悪い方法です。同様の機能を持つ変数に名前を付けるには、どのような方法が望ましいでしょうか?