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
在perl中,无法迭代数组中的哈希_Perl - Fatal编程技术网

在perl中,无法迭代数组中的哈希

在perl中,无法迭代数组中的哈希,perl,Perl,这是我的数据结构 my @mysqlBooleanNumeric=( ( 'TR'=>" OR 1=1--", 'FAL'=>" OR 1=2--"), ('TR'=>"/**/OR/**/1=1--", 'FAL'=>"/**/OR/**/1=2--" ) ); 我在函数中使用它 sub main{ GetPayLoad(@mysqlBooleanNumeric); } sub Ge

这是我的数据结构

   my @mysqlBooleanNumeric=(
              ( 'TR'=>" OR 1=1--", 'FAL'=>" OR 1=2--"),
              ('TR'=>"/**/OR/**/1=1--", 'FAL'=>"/**/OR/**/1=2--" )     

);
我在函数中使用它

sub main{
  GetPayLoad(@mysqlBooleanNumeric);
}
   sub GetPayLoad{

           my(@payloads,%categories,$key,$value);
           (@payloads)=@_;


for my $i (0 .. $#payloads ) {

            foreach my $key ( keys $payloads[$i] )
            {
                print "$payloads[$i]{$key}\n";
            }

      }
}
这就是函数

sub main{
  GetPayLoad(@mysqlBooleanNumeric);
}
   sub GetPayLoad{

           my(@payloads,%categories,$key,$value);
           (@payloads)=@_;


for my $i (0 .. $#payloads ) {

            foreach my $key ( keys $payloads[$i] )
            {
                print "$payloads[$i]{$key}\n";
            }

      }
}
这就是我得到的

引用上键的参数类型必须为未lessed hashref或arrayref

更新:

顺便说一句,这也不行

 sub GetPayLoad{

           my(@payloads);
           (@payloads)=@_;

        for my $payload (@payloads){

               for my $key (sort keys %$payload){
                   print "$payload->{$key} \n";
               }

        }

}
在中“strict refs”时不能将字符串(“TR”)用作哈希引用

我创建的代码如下示例所示:


但它并不意味着匿名散列在花括号中,而不是圆括号中:

my @mysqlBooleanNumeric = (
  { TR => ' OR 1=1--',       FAL => ' OR 1=2--'},
  { TR => '/**/OR/**/1=1--', FAL => '/**/OR/**/1=2--'},     
);
使用圆括号相当于

my @mysqlBooleanNumeric = ( 'TR', ' OR 1=1--', 'FAL', ' OR 1=2--',
                            'TR', '/**/OR/**/1=1--', 'FAL', ' \/**/OR/**/1=2--');

这是一个混乱的解决方案。我想要一个散列数组。当我使用该语法时,它还认为数组中有8个元素。.为什么?@user2873728:解决方案是第一个代码示例。他是说您所编写的代码相当于第二个代码示例。