perl将哈希数组传递给子
我通过引用一个子perl将哈希数组传递给子,perl,loops,hash,arguments,infinite,Perl,Loops,Hash,Arguments,Infinite,我通过引用一个子函数(\@charts)传递一个数组 数组图表包含i=0处的哈希数组和i=1处的字符串,依此类推(哈希字符串..) 我想在@x中存储散列的键,在@y中存储值,如下面的函数所示;它一直在打印 sub function{ print Dumper @_; for ($i=0;$i<scalar @{$_[0]} ;$i+2) { @data= @{$_[$i]}; $title=$_[$i+1]; %hash =%{$data[$i]}
函数(\@charts)传递一个数组代码>
数组图表包含i=0处的哈希数组和i=1处的字符串,依此类推(哈希字符串..)
我想在@x中存储散列的键,在@y中存储值,如下面的函数所示;它一直在打印
sub function{
print Dumper @_;
for ($i=0;$i<scalar @{$_[0]} ;$i+2)
{
@data= @{$_[$i]};
$title=$_[$i+1];
%hash =%{$data[$i]};
# print Dumper \%hash;
foreach my $key (sort { $a <=> $b} keys %hash) {
push (@x,$key);
push (@y,$hash{$key});
}
print Dumper @x;
}}
这是@x无限循环
问题在哪里?如何解决?
提前感谢无限循环就是因为这条线
for ($i=0;$i<scalar @{$_[0]} ;$i+2)
# ^^^^---- here
你应该做的是把这些东西放在一起
$VAR1 = [
{
'title' => 'foo',
'data' => {
'a' => 1,
'b' => 2
}
},
{
'title' => 'bar',
'data' => {
'y' => 13,
'x' => 12
}
}
];
这样,您就可以直接赋值,并使用一个简单的循环
for my $href (@_) {
my $title = $href->{title};
my %hash = %{ $href->{data} };
....
}
您还应该添加
use strict;
use warnings;
并在尽可能小的范围内声明变量,例如在子例程的循环内。无限循环就是因为这一行
for ($i=0;$i<scalar @{$_[0]} ;$i+2)
# ^^^^---- here
你应该做的是把这些东西放在一起
$VAR1 = [
{
'title' => 'foo',
'data' => {
'a' => 1,
'b' => 2
}
},
{
'title' => 'bar',
'data' => {
'y' => 13,
'x' => 12
}
}
];
这样,您就可以直接赋值,并使用一个简单的循环
for my $href (@_) {
my $title = $href->{title};
my %hash = %{ $href->{data} };
....
}
您还应该添加
use strict;
use warnings;
并在尽可能小的范围内声明变量,例如在子例程中的循环内。感谢您的回答,我在u编写时更改了设置,但在尝试访问$title和%hash时,我遇到了一个错误“nota hash reference”,这意味着您没有发送hash引用。事实上,我是以这种方式发送它的函数(\@charts);这个转储程序就像[{},{},{}]。当我删除“\”并且转储程序给出{{},{},{}时,事情就解决了。虽然我不知道为什么会有这样的困惑。非常感谢您的帮助谢谢您的回答,我在u编写时更改了设置,但是在尝试访问$title和%hash时,我遇到了一个错误“nota hash reference”,这意味着您没有发送hash reference。事实上,我是通过函数(\@charts)这样发送的;这个转储程序就像[{},{},{}]。当我删除“\”并且转储程序给出{{},{},{}时,事情就解决了。虽然我不知道为什么会有这样的困惑。非常感谢你的帮助