无法遍历perl中数组内的散列

时间:2013-10-12 10:30:22

标签: perl

这是我的数据结构。

   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";
            }

      }
}

这就是我得到的......

  

引用键的参数类型必须是非散列的hashref或arrayref

更新:

这也不起作用,BTW

 sub GetPayLoad{

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

        for my $payload (@payloads){

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

        }

}
  

中的“strict refs”时,不能使用字符串(“TR”)作为HASH引用

我在此示例中创建了我的代码:

enter link description here

但它确实没有人。

1 个答案:

答案 0 :(得分:1)

匿名哈希是用大括号引入的,而不是圆括号:

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--');