gpt4 book ai didi

arrays - perl eval获取单个元素数组

转载 作者:行者123 更新时间:2023-12-02 08:28:14 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 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 个打印输出的标量引用,但我想要一个包含单个元素的数组,如下所示:

$VAR1 = \[
"192.168.1.100"
];

最佳答案

eval "[192.168.1.100]" 是数组引用,而不是标量引用。数组引用包含一个元素,但它不是您可能期望的字符串 "192.168.1.100",因为 192.168.1.100 未被引用。相反,您正在创建 version string 192.168.1.100

解决方法是在您的输入中包含引号或引用运算符。

my $ip_array = "['192.168.1.100']";
my $ip_array2 = "[qq/192.168.1.100/,]";

参见 perldata 中的“版本字符串” .

关于arrays - perl eval获取单个元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29971697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com