如何在perl中获得列表的哈希值

发布于 2024-12-05 17:02:42 字数 484 浏览 2 评论 0原文

抱歉这个语法问题。我找不到解决方案。 我想在 perl 中有一个散列数组,每个散列都有字符串和数组。 我正在尝试编写以下代码:

use strict;
my @arr = (
       { name => "aaa" , values => ("a1","a2") },
       { name => "bbb" , values => ("b1","b2","b3") }
      );


foreach $a (@arr) {
  my @cur_values = @{$a->{values}};
  print("values of $a->{name} = @cur_values\n");
};

但这对我不起作用。我收到编译错误和警告(使用 perl -w)

a.pl 第 2 行的匿名哈希中的元素数量为奇数。 当 a.pl 第 9 行使用“严格引用”时,无法使用字符串(“a1”)作为 ARRAY 引用。

Sorry for this syntax question. I fail to find the solution.
I want to have an array of hashs in perl, each of them has string and array.
I'm trying to write the following code:

use strict;
my @arr = (
       { name => "aaa" , values => ("a1","a2") },
       { name => "bbb" , values => ("b1","b2","b3") }
      );


foreach $a (@arr) {
  my @cur_values = @{$a->{values}};
  print("values of $a->{name} = @cur_values\n");
};

But this does not work for me. I get compilation error and warning (using perl -w)

Odd number of elements in anonymous hash at a.pl line 2.
Can't use string ("a1") as an ARRAY ref while "strict refs" in use at a.pl line 9.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

家住魔仙堡 2024-12-12 17:02:42

我想在 perl 中拥有一个哈希数组

你不能。 Perl 中的数组仅包含标量。不过,{} 将创建一个哈希引用,它是一个标量,没有问题。

但这: 的

{ name => "aaa" , values => ("a1","a2") }

意思与:

{ name => "aaa" , values => "a1", "a2" },

您需要一个 arrayref (这是一个标量),而不是值的列表。

{ name => "aaa" , values => ["a1","a2"] }

I want to have an array of hashs in perl

You can't. Arrays only contain scalars in Perl. However, {} will create a hashref, which is a scalar and is fine.

But this:

{ name => "aaa" , values => ("a1","a2") }

means the same as:

{ name => "aaa" , values => "a1", "a2" },

You want an arrayref (which is a scalar), not a list for the value.

{ name => "aaa" , values => ["a1","a2"] }
断念 2024-12-12 17:02:42

尝试以下操作:

use strict;
my @arr = (
       { name => "aaa" , values => ["a1","a2"] },
       { name => "bbb" , values => ["b1","b2","b3"] }
      );


foreach $a (@arr) {
  my @cur_values = @{$a->{values}};
  print("values of $a->{name}: ");
    foreach $b (@cur_values){
        print $b . ", "
    }
    print "\n";
};

在第 3 行和第 4 行定义数组时,您只需使用方括号即可。

Try the following:

use strict;
my @arr = (
       { name => "aaa" , values => ["a1","a2"] },
       { name => "bbb" , values => ["b1","b2","b3"] }
      );


foreach $a (@arr) {
  my @cur_values = @{$a->{values}};
  print("values of $a->{name}: ");
    foreach $b (@cur_values){
        print $b . ", "
    }
    print "\n";
};

You just needed to use square brackets when defining your array on lines 3 and 4.

丑丑阿 2024-12-12 17:02:42
my @arr = (
            { name => "aaa" , values => ["a1","a2"]      },
            { name => "bbb" , values => ["b1","b2","b3"] }
          );

列表(用 () 创建)将被展平。 Arrayrefs ([]) 不会。

有关更多信息,请参阅 perldoc perlreftut

另外,避免使用 $a$b 作为变量名称,因为它们专门用于 sort 块内。

my @arr = (
            { name => "aaa" , values => ["a1","a2"]      },
            { name => "bbb" , values => ["b1","b2","b3"] }
          );

Lists ( made with ()) will get flattened. Arrayrefs ([]) won't.

See perldoc perlreftut for more.

Also, avoid using $a and $b as variable names as they are intended for special use inside sort blocks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文