【问题标题】:Create an Array Ref in one line in Perl在 Perl 的一行中创建一个数组引用
【发布时间】:2021-06-09 17:05:29
【问题描述】:

我正在思考是否可以在 Perl 中的一行中创建一个数组 ref 的问题。有点像你会定义一个数组。我通常会执行以下操作:

#!/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);

但是,这并没有按我预期的方式工作。这甚至可能吗?

【问题讨论】:

  • 请参阅 my comments from today on this question 了解为什么 \qw/foo bar/ 不起作用。
  • my $arrayref = \(qw(test if this works); 将为您提供对列表中最后一个元素的标量引用。 \"works"
  • @simbabque 我读了你的回答和 perlreftut,这是有道理的,我想出了人们在这里所说的话。谢谢。

标签: arrays perl reference


【解决方案1】:

您可以为此使用“方括号匿名数组构造函数”。它将创建一个数组引用'literal'

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

或列出所有成员:

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

您可以使用 Data Dumper 验证这两个结果:

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

【讨论】:

  • 我正在阅读@simbabque 告诉我阅读perldoc.perl.org/perlreftut.html 的文档,它击中了我。回来发表我自己的答案,你打败了我。
  • 那是数组引用,但不是问题中数组变量@array的引用。有明显区别!
  • @simbabque - 我想从这个意义上说,我的例子并没有清楚地表明我想要完成什么。我想做上面的事情。我知道在这种情况下数组不存在,现在我们只有一个数组 REF,它可以传递给不同的变量并包含这些值。我的目标是摆脱数组,因为它似乎是多余的。
  • @KirsKringle 在这种情况下,是的,这正是您所需要的。 :)
【解决方案2】:

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

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

因此,如果这是您想要做的,那是可能的。

【讨论】:

    【解决方案3】:

    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) ]; 语法的人来说,它可能会很方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多