Perl中如何一行创建数组引用?求可行实现方式
在Perl中一行创建数组引用的方法
当然可以!Perl提供了非常简洁的方式直接一行创建数组引用,不用先声明普通数组再取引用。下面来一步步解决你的问题:
最推荐的写法
直接用方括号[]包裹你的列表(比如qw生成的列表),它会自动创建一个匿名数组并返回其引用:
my $arrayref = [qw(test if this works)];
用Data::Dumper验证的话,输出和你原来的写法完全一致:
#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my $arrayref = [qw(test if this works)]; print Dumper($arrayref);
输出结果:
$VAR1 = [ 'test', 'if', 'this', 'works' ];
为什么你的尝试没生效?
你之前写的my $arrayref = \(qw(test if this works);首先有语法错误——少了一个闭合括号。就算修正为my $arrayref = \(qw(test if this works));,这时候\(...)的行为和你预期的不一样:
\操作符作用于括号包裹的表达式时,会在标量上下文里计算表达式的值,然后返回这个标量的引用。qw(...)在标量上下文里返回的是数组的元素个数(这里是4),所以你得到的其实是一个指向数字4的标量引用,而不是数组引用,自然达不到预期效果。
其他可选写法
如果你想换一种方式(虽然不如方括号简洁),也可以用do块来临时创建数组再取引用:
my $arrayref = do { my @temp = qw(test if this works); \@temp };
不过这种写法多了临时变量,不如[]直接高效,所以一般还是推荐第一种方法。
内容的提问来源于stack exchange,提问作者Kirs Kringle
相关产品推荐
相关产品推荐

