我正在尝试将JSON字符串解析为数组引用:
my $str = '[[2],[1]]';
my $data = map { $_->[0] } @{decode_json( $str )};
但这使它成为一个标量。我能做到:
my $str = '[[2],[1]]';
my @data = map { $_->[0] } @{decode_json( $str )};
my $data = \@data;
但它并不像我喜欢的那么短。有什么帮助吗?
答案 0 :(得分:11)
怎么样:
my $str = '[[2],[1]]';
my $data = [map {$_->[0]} @{decode_json($str)}];
答案 1 :(得分:2)
使用中间变量:
my $str = '[[2],[1]]';
my @data = map { $_->[0] } @{decode_json( $str )};
my $data = \@data;
答案 2 :(得分:1)
由于OP询问哪种方法有更多的开销,这里有一个我用来比较两者的快速配置文件。您可以随意编辑条目以改进测量:
#!/usr/bin/perl -w
use strict;
use Benchmark qw(cmpthese);
sub count(\$$) {
${$_[0]} += @{$_[1]};
}
sub a() {
count($a, [map {$_ + 1} 1..1000000]);
}
sub b() {
my @d = map {$_ + 1} 1..1000000;
count($b, \@d);
}
cmpthese(-10, {a => \&a, b => \&b});