在Perl中的一行中创建一个Array Ref

时间:2018-05-03 12:28:33

标签: arrays perl reference

我正在思考是否可以在Perl中的一行中创建数组引用的问题。有点像你定义一个数组。我通常会做以下事情:

#!/usr/bin/perl
# your code goes here
use warnings;
use strict;
use Data::Dumper;

my @array = qw(test if this works);
my $arrayref = \@array;
print Dumper($arrayref);

我的想法是你应该能够这样做:

my $arrayref = \(qw(test if this works);
然而,这不符合我的预期。这甚至可能吗?

3 个答案:

答案 0 :(得分:7)

你可以通过使用'square-bracketed anonymous array constructor'来做到这一点。它将创建一个数组引用'literal'

my $arrayref = [ qw(test if this works) ];

或列出每个成员:

my $arrayref = [ 'test', 'if', 'this', 'works' ];

您可以使用数据转储程序验证这两个结果:

$VAR1 = [
          'test',
          'if',
          'this',
          'works'
        ];

答案 1 :(得分:2)

如果您的目标是在一行中创建数组引用,请使用方括号创建一个数组引用,这将创建一个匿名数组。

use Data::Dumper;
my $arrayRef = [qw(test if this works)];
print Dumper($arrayRef);

所以,如果这是你想要做的,那就有可能。

答案 2 :(得分:-1)

Quote::Ref 模块为数组/散列引用实现了 qw(引用运算符)。

use Quote::Ref 'qwa';
 
my $arrayref = qwa( test if this works ); 
# ==> $arrayref = [ qw( test if this works ) ]

不知道它是否为这么简单的东西增加了可读性,只需添加 OMWTDI...不过对于难以记住 [ qw(test if this works) ]; 语法的人来说,它可能很方便。