我需要将一个数组数组插入到一个数组中。整个数组是hash中一个键的值.i表示哈希应该如下所示:
"one"
[
[
1,
2,
[
[
3,
4
],
[
5,
6
]
]
]
]
其中一个是此处的键,如果哈希中该键的值,则为剩余部分。 观察到数组[3,4]和[5,6]是实际数组中的第三个元素。前两个元素是1和2。
我写了一个小程序来做同样的事。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;
$Data::Dumper::Useqq = 1;
$Data::Dumper::Deparse = 1;
my %hsh;
my @a=[1,2];
my @b=[[3,4],[5,6]];
$hsh{"one"}=\@a;
push @{$hsh{"one"}},@b;
print Dumper(%hsh);
但是这打印如下:
"one"
[
[
1,
2
], #here is where i see the problem.
[
[
3,
4
],
[
5,
6
]
]
]
我可以看到数组数组没有插入到数组中。 有人可以帮我吗?
答案 0 :(得分:1)
首先,注意:只将标量传递给Dumper
。如果要转储数组或散列,请传递引用。
然后就是你期望的问题。你说你期待
[ [ 1, 2, [ [ 3, 4 ], [5, 6] ] ] ]
但我认为你真的希望
[ 1, 2, [ [ 3, 4 ], [5, 6] ] ]
两个错误都有相同的原因。
[ ... ]
装置
do { my @anon = ( ... ); \@anon }
所以
my @a=[1,2];
my @b=[[3,4],[5,6]];
将单个元素分配给@a
(对匿名数组的引用),将单个元素分配给@b
(对不同匿名数组的引用)。
你真的想要
my @a=(1,2);
my @b=([3,4],[5,6]);
所以来自
my %hsh;
$hsh{"one"}=\@a;
push @{$hsh{"one"}},@b;
print(Dumper(\%hsh));
你得到了
{
"one" => [
1,
2,
[
3,
4
],
[
5,
6
]
]
}
答案 1 :(得分:0)
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;
$Data::Dumper::Useqq = 1;
$Data::Dumper::Deparse = 1;
my %hsh;
my @a=(1,2); # this should be list not array ref
my @b=([3,4],[5,6]); # this should be list conatining array ref
push (@a, \@b); #pushing ref of @b
push (@{$hsh{'one'}}, \@a); #pushing ref of @a
print Dumper(%hsh);
输出:
"one"
[
[
1,
2,
[
[
3,
4
],
[
5,
6
]
]
]
]
更新:
my %hsh;
my @a=( 1,2 );
my @b=( [3,4],[5,6] );
push (@a, @b); # removed ref of @b
push (@{$hsh{'one'}}, @a); #removed ref of @a
print Dumper(\%hsh);
Output:
{
"one" => [
1,
2,
[
3,
4
],
[
5,
6
]
]
}