首先,语法使用hash 中@p{$i}
的键访问条目,并在列表上下文中返回它。我不认为你是那个意思。收到有关未声明变量的警告。$i
%p
use strict; use warnings;
my
您可以使用, 例如my @p;
或my $size = @p
;声明变量
动态创建变量名称是可能的,但这是一种不好的做法。好消息是我们不需要:Perl 有引用。对数组的引用允许我们嵌套数组,例如
my @AoA = (
[1, 2, 3],
["a", "b"],
);
say $AoA[0][1]; # 2
say $AoA[1][0]; # a
我们可以使用方括号创建数组引用,例如[ @array ]
,或通过引用运算符\
:
my @inner_array = (1 .. 3);
my @other_inner = ("a", "b");
my @AoA = (\@inner_array, \@other_array);
但要小心:数组引用仍然指向与原始名称相同的数组,因此
push @other_inner, "c";
还更新了以下条目@AoA
:
say $AoA[1][2]; # c
翻译成您的问题,这意味着您想要:
my @pn;
for (@p) {
push @pn, [ split /[ ]+/ ];
}
还有很多其他的方式来表达这一点,例如
my @pn = map [ split /[ ]+/ ], @p;
或者
my @pn;
for my $i ( 0 .. $#p ) {
$pn[$i] = [ split /[ ]+/, $p[$i] ];
}
要了解有关参考的更多信息,请阅读