Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl将哈希数组传递给子_Perl_Loops_Hash_Arguments_Infinite - Fatal编程技术网

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)这样发送的;这个转储程序就像[{},{},{}]。当我删除“\”并且转储程序给出{{},{},{}时,事情就解决了。虽然我不知道为什么会有这样的困惑。非常感谢你的帮助