Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Perl中引用拆分表达式?_Arrays_Perl_Split_Reference - Fatal编程技术网

Arrays 如何在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') ]; 背景说明: ,与其他函数一样,返

我想创建一个对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') ];

背景说明:

,与其他函数一样,返回一个列表。您不能引用列表。但是,如果将引用运算符应用于列表,它将应用于其所有成员。例如:

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') ];