说,有一个字符串"[1,2,3,4,5]"
,如何将其更改为[1,2,3,4,5]
的数组引用?使用split
并重新组合数组是一种方法,但看起来应该有一种更简单的方法。
答案 0 :(得分:5)
eval
是最简单的方式
$string = "[1,2,3,4,5]";
$ref = eval $string;
但如果您无法控制$string
的内容,则这是不安全的。
你的输入字符串也是有效的JSON,所以你可以说
use JSON;
$ref = decode_json( $string );
答案 1 :(得分:3)
您可以使用eval
但是当相关字符串来自不受信任的来源时,绝对应该避免这种情况。
否则你必须自己解析它:
my @arr = split(/\s*,\s*/, substr($string, 1, -1));
my $ref = \@arr;
答案 2 :(得分:2)
如果可以,你真的应该避免eval
。如果字符串来自程序外部,那么只需将eval
应用于它就可以完成无法造成的损坏。
如果数组的内容只是数字,那么您可以使用正则表达式来提取所需的信息。
这是一个例子
use strict;
use warnings;
my $string = "[1,2,3,4,5]";
my $data = [ $string =~ /\d+/g ];
use Data::Dump;
dd $data;
<强>输出强>
[1 .. 5]