Arrays 如何在Perl中引用拆分表达式?
我想创建一个对Perl中通过拆分获得的数组的引用。 我的想法是:Arrays 如何在Perl中引用拆分表达式?,arrays,perl,split,reference,Arrays,Perl,Split,Reference,我想创建一个对Perl中通过拆分获得的数组的引用。 我的想法是: my $test = \split( /,/, 'a,b,c,d,e'); foreach $k (@$test) { print "k is $k\n"; } 但这会导致c:\temp\test.pl第3行的不是数组引用。 我尝试了其他几种方法,但都没有成功。环绕split命令放在方括号中以进行匿名引用 my $test = [ split( /,/, 'a,b,c,d,e') ]; 背景说明: ,与其他函数一样,返
my $test = \split( /,/, 'a,b,c,d,e');
foreach $k (@$test) {
print "k is $k\n";
}
但这会导致c:\temp\test.pl第3行的不是数组引用。
我尝试了其他几种方法,但都没有成功。环绕
split
命令放在方括号中以进行匿名引用
my $test = [ split( /,/, 'a,b,c,d,e') ];
背景说明: ,与其他函数一样,返回一个列表。您不能引用列表。但是,如果将引用运算符应用于列表,它将应用于其所有成员。例如:
use Data::Dumper;
my @x = \('a' .. 'c');
print Dumper \@x
输出:
$VAR1 = [
\'a',
\'b',
\'c'
];
因为您要指定一个标量,所以右侧是在标量上下文中。标量上下文中的逗号运算符(是的,它是一个运算符!)计算其左侧,丢弃结果,然后计算其右侧并返回结果。实际上,该列表将其最右边的值指定给$scalar。许多人把这搞砸了,因为他们选择了一个类似的列表,其最后一个元素也是他们期望的计数:
my $scalar = ( 1, 2, 3 ); # $scalar gets 3, accidentally
在您的情况下,您在RHS上得到的是一个列表,该列表的元素引用由split
返回,该列表的最后一个元素以$test
结束。首先需要从这些返回值构造一个数组,并引用该数组。您可以通过形成一个匿名数组并将对该数组的引用存储在$test
中,将其作为一条语句:
my $test = [ split( /,/, 'a,b,c,d,e') ];
给它命名具有不同的语义,即更改命名变量,然后更改引用的内容,而每个匿名数组都是唯一的。通过在循环中执行此操作,我很难发现这一点。谢谢,我在perl书中的反斜杠示例有点误导了我。这是否与将拆分结果存储在var
@splitResult
中,然后使用$arrayRef=\@splitResult
引用该var一样有效?或者数组被初始化了两次?一次在分割过程中,再次初始化匿名数组引用。这就是为什么我如此喜欢它!非常感谢您透彻、耐心和非常清晰的解释。现在完全清楚了,我今天学到了很多。谢谢
my $test = [ split( /,/, 'a,b,c,d,e') ];