foreach (@v) { s/^\s+//; s/\s+$// }
push @{$data[$x]}, @v;
}
我收到一个错误:全局变量@data需要显式包名 -
不知道如何添加“我的”。
但我也不明白这行代码,
答案 0 :(得分:4)
my
声明了词法范围的变量。这似乎不合适,因为似乎没有新变量被命名,除非@data
是新的,在这种情况下my
必须移动:
push @{(my @data)[$x]}, @v;
由于@data
的词汇范围立即消失,或者更清晰有效地消失,因此主要是无用的:
my @data;
push @{$data[$x]}, @v;
其中@data
的范围稍大。
perlreftut
解释@{...}
。没有my
,
push @{$data[$x]}, @v;
表示获取$x
数组的@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
# );
答案 1 :(得分:1)
您是否在尝试定义@data
的同时进行推广?在没有更多信息的情况下,my
的含义尚不清楚。
@{}
包装器说“大括号内的东西是一个arrayref,所以现在把它当作一个真正的数组”。 push命令应该将@v
数组的所有元素复制到$x
数组的@data
元素上,该元素应该是数组引用。