【发布时间】:2015-04-30 15:24:13
【问题描述】:
我试图弄清楚如何使用 perl 的 eval 来获取单个元素数组。到目前为止,我有:
use strict;
use warnings;
use Data::Dumper;
sub printit
{
my $param = shift;
my $thing = eval $param;
if (ref($thing) =~ /HASH/ || ref($thing) =~ /ARRAY/) {
print Dumper \$thing;
} else {
print $param . "\n";
}
}
my $ip = "192.168.1.100";
my $ip_array = "[192.168.1.100]";
my $ip_array2 = "[192.168.1.100,]";
my $string = "{ a => 1, b => 2, c => 3}";
my $another_string = "[1, 2, 3 ]";
printit($ip);
printit($string);
printit($another_string);
printit($ip_array);
printit($ip_array2);
我的输出如下:
[user]$ perl ~/tmp/cast.pl
192.168.1.100
$VAR1 = \{
'c' => 3,
'a' => 1,
'b' => 2
};
$VAR1 = \[
1,
2,
3
];
$VAR1 = \[
"\x{c0}\x{a8}d"
];
$VAR1 = \[
"\x{c0}\x{a8}d"
];
我想我得到了最后 2 次打印输出的标量 ref,但我想要一个包含单个元素的数组,如下所示:
$VAR1 = \[
"192.168.1.100"
];
【问题讨论】:
-
你确定这就是你得到的吗?我刚刚尝试运行您的代码,并获得了所需的输出...
-
@Sobrique:你运行什么 Perl 版本?
-
Activeperl 5.20.1 - 猜测我们可能会在这里进行引用插值。是否:
my $ip_array = "['192.168.1.100']";显示相同的问题? -
print Dumper \$thing;应该是print Dumper $thing;。如果要转储不是标量的变量,请使用\。