0

说,有一个字符串"[1,2,3,4,5]",我怎么能把它改成一个数组引用[1,2,3,4,5]呢?使用split和重组数组是一种方法,但看起来应该有一种更简单的方法。

4

3 回答 3

5

eval是最简单的方法

$string = "[1,2,3,4,5]";
$ref = eval $string;

但如果您无法控制$string.

不过,您的输入字符串也是有效的 JSON,所以您可以说

use JSON;
$ref = decode_json( $string );
于 2013-11-07T23:47:41.037 回答
3

您可以使用eval,但是当有问题的字符串来自不受信任的来源时,绝对应该避免这种情况。

否则你必须自己解析它:

my @arr = split(/\s*,\s*/, substr($string, 1, -1));
my $ref = \@arr;
于 2013-11-07T23:46:58.643 回答
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]
于 2013-11-08T02:23:46.563 回答