2

プログラミング初心者です。タスクは、文字列から特定のデータを抽出することであり、次のようにコードを記述することにしました -

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. 経験上、これはおそらく変数に名前を付ける悪い方法です。同様の機能を持つ変数に名前を付けるには、どのような方法が望ましいでしょうか?

4

1 に答える 1