Perl相当于PHP的compact()?

时间:2014-09-23 20:07:24

标签: perl

我已经在其他语言中看到了等同于PHP's compact function的问题,但没有看到Perl的问题,请原谅我,如果这是我错过的东西的重复。如果你不熟悉这个功能,那么我正在寻找。

给定变量:

my $one = "1";
my $two = "2";
my $three = "3";

#using compact as example here since this function doesn't exist in perl
my $array = compact("one","two","three");

然后转储$ array会给:

[
    one => "1,
    two => "2",
    three => "3"
]

来自PHP documentation for compact

  

创建一个包含变量及其值的数组。

     

对于其中的每一个,compact()在当前符号表中查找具有该名称的变量,并将其添加到输出数组,以便变量名称成为键,变量的内容成为那把钥匙。

我特别使用5.8.8版。如果我的某些语法不合适,请原谅我。我的背景是PHP。

2 个答案:

答案 0 :(得分:1)

而不是:

my $one = "1";
my $two = "2";
my $three = "3";

#using compact as example here since this function doesn't exist in perl
my $array = compact("one","two","three");
你想要

use strict;
use warnings;
use feature 'say';
use Data::Dumper;

my $numbers = {
    one => 1,
    two => 2,
    three => 3,
};

say Dumper $numbers;
my $sum = $numbers->{one} + $numbers->{two};
say $sum;

答案 1 :(得分:0)

如果将变量声明为包变量(例如$::one = 1our $one = 1),则可以通过检查符号表来执行此操作。但是,我强烈建议不要这样做。我已经为Perl编程超过20年了,而且我从来没有这么做过。改为使用get-go中的哈希值。

拜托,请不要这样做。但是,如果你陷入困境并真正努力寻求解决方案,那就是一个。它仅适用于声明为包变量的简单标量值(如示例中所示)。

my %hash = map { $_ => ${$::{$_}} } qw{one two three};

或者:

sub compact { +{ map { $_ => ${$::{$_}} } @_ } }

my $hashref = compact("one", "two", "three");