foreach (@v) { s/^\s+//; s/\s+$// }
push @{$data[$x]}, @v;
}
エラーが発生します:グローバル変数@dataには明示的なパッケージ名が必要です–「my」を追加する方法がわかりません。
しかし、私もこのコード行を理解していません、
- v要素をdata[x]にプッシュしています。しかし、@はどのように機能しますか。{}がハッシュに使用されていることを理解しています。
foreach (@v) { s/^\s+//; s/\s+$// }
push @{$data[$x]}, @v;
}
エラーが発生します:グローバル変数@dataには明示的なパッケージ名が必要です–「my」を追加する方法がわかりません。
しかし、私もこのコード行を理解していません、
my
字句スコープの変数を宣言します。が新しい場合を除いて、名前が付けられている新しい変数がないように見えるため、ここでは適切ではないようです。@data
新しい場合は、my
移動する必要があります。
push @{(my @data)[$x]}, @v;
これは、語彙スコープが@data
すぐに消えるので、ほとんど役に立たないか、より明確かつ有用になります。
my @data;
push @{$data[$x]}, @v;
ここ@data
で、は少し広い範囲にあります。
perlreftut
説明します@{...}
。なしmy
で、
push @{$data[$x]}, @v;
$x
配列のth要素を取得し、@data
それを配列参照として扱い、それに追加@v
することを意味します。
例えば、
my @data = (
[], # 0
['a'], # 1
['b'], # 2
['c', 'd'], # 3
);
my $x = 2;
my @v = ('e', 'f');
push @{$data[$x]}, @v;
# @data = (
# [], # 0
# ['a'], # 1
# ['b', 'e', 'f'], # 2
# ['c', 'd'], # 3
# );
@data
あなたはそれに押し込んでいるのと同時に定義しようとしていますか?my
これ以上の情報がなければ、それが何のためにあるのかは不明です。
ラッパーは、@{}
「中括弧内のものはarrayrefなので、今は実際の配列として扱います」と述べています。pushコマンドは、配列のすべての要素を@v
配列の$x
'番目の要素にコピー@data
する必要があります。これは配列参照である必要があります。