我已经在其他语言中看到了等同于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。
答案 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 = 1
或our $one = 1
),则可以通过检查符号表来执行此操作。但是,我强烈建议不要这样做。我已经为Perl编程超过20年了,而且我从来没有这么做过。改为使用get-go中的哈希值。
拜托,请不要这样做。但是,如果你陷入困境并真正努力寻求解决方案,那就是一个。它仅适用于声明为包变量的简单标量值(如示例中所示)。
my %hash = map { $_ => ${$::{$_}} } qw{one two three};
或者:
sub compact { +{ map { $_ => ${$::{$_}} } @_ } }
my $hashref = compact("one", "two", "three");