-1


 foreach (@v) { s/^\s+//; s/\s+$// }
        push @{$data[$x]}, @v;
      }
我收到一个错误:全局变量 @data 需要明确的包名称——不知道如何添加“我的”。

但是我也看不懂这行代码,

  • 它将 v 元素推入 data[x]。但是@是如何工作的。我了解 {} 用于哈希。
4

2 回答 2

4

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
# );
于 2012-08-27T04:12:17.030 回答
1

您是否在尝试定义@data它的同时进行定义?my如果没有更多信息,目前还不清楚这是为了什么。

包装器说“大括号内的@{}东西是一个数组引用,所以现在把它当作一个真正的数组”。push 命令应该将数组的所有元素复制到@v数组的第$x' 个元素上@data,它应该是一个数组引用。

于 2012-08-27T04:05:11.300 回答