foreach (@v) { s/^\s+//; s/\s+$// }
push @{$data[$x]}, @v;
}
我收到一个错误:全局变量 @data 需要明确的包名称——不知道如何添加“我的”。
但是我也看不懂这行代码,
- 它将 v 元素推入 data[x]。但是@是如何工作的。我了解 {} 用于哈希。
foreach (@v) { s/^\s+//; s/\s+$// }
push @{$data[$x]}, @v;
}
我收到一个错误:全局变量 @data 需要明确的包名称——不知道如何添加“我的”。
但是我也看不懂这行代码,
my
声明词法范围的变量。这里似乎不合适,因为似乎没有新变量被命名,除非@data
是新变量,在这种情况下my
必须移动:
push @{(my @data)[$x]}, @v;
这几乎是无用的,因为 的词汇范围@data
立即消失了,或者更清楚、更有用:
my @data;
push @{$data[$x]}, @v;
where@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
如果没有更多信息,目前还不清楚这是为了什么。
包装器说“大括号内的@{}
东西是一个数组引用,所以现在把它当作一个真正的数组”。push 命令应该将数组的所有元素复制到@v
数组的第$x
' 个元素上@data
,它应该是一个数组引用。