Arrays 有没有办法把散列分割成一个数组?

Arrays 有没有办法把散列分割成一个数组?,arrays,regex,perl,hash,scripting,Arrays,Regex,Perl,Hash,Scripting,我一直试图用散列分割数组,但我得到了以下错误 在拆分中使用未初始化的值$ 从下面的代码中,我无法拆分数组并将以下内容分配给$id和$pwd。任何线索将不胜感激 一种可能的方法是: @array = ("forest:k233356", "wi45one:1onetothree"); %hash = map {split(":",$_, 2) } @array; @这里的数组是字符串数组。映射在数组的每个元素上应用split:,$\u2

我一直试图用散列分割数组,但我得到了以下错误

在拆分中使用未初始化的值$


从下面的代码中,我无法拆分数组并将以下内容分配给$id和$pwd。任何线索将不胜感激

一种可能的方法是:

@array = ("forest:k233356", "wi45one:1onetothree");
%hash = map {split(":",$_, 2) } @array;
@这里的数组是字符串数组。映射在数组的每个元素上应用split:,$\u2,这会将每个字符串拆分为最多2个字段,如下面的注释所述,并将结果返回给%hash。最后,%散列将ID作为键,PWD作为值

如果需要更多帮助,请阅读:


除了您的代码没有编译,因此,不可能给出您向我们显示的错误消息之外,它与正确答案非常接近

这是轻微的清理和扩展,以实际将数据放入散列,但它与您开始使用的非常相似

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my %hash;
my @array = ("forest:k233356", "wi45one:1onetothree");

foreach (@array) {
  my ($id, $pwd) = split(/:/, $_, 2);

  $hash{$id} = $pwd;
}

say Dumper \%hash;
一些风格要点:

我在不同的地方添加了更多的空格。 我删除了定义数组时不必要的括号。 我做了第一个参数,将其拆分为正则表达式。 我添加了2作为要拆分的第三个参数,因此字符串只会拆分为两部分。这与现有数据没有任何区别,但最好是安全的。
所有这些都不会对代码的工作方式产生任何影响-它们只是使代码更易于阅读和理解。

这些都不是散列的。它们是弦。试试$id,$pwd=split/:/;1您发布的代码不会生成您声称会生成的消息。它甚至不编译。2如果您添加代码编译所需的卷曲,它将完全满足您的需要。您希望使用split的第三个参数来确保获得两个元素:split/:/,$2。否则,某些字符串可能会给出1个或两个以上的元素,这会将%hash的赋值搞砸。
#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my %hash;
my @array = ("forest:k233356", "wi45one:1onetothree");

foreach (@array) {
  my ($id, $pwd) = split(/:/, $_, 2);

  $hash{$id} = $pwd;
}

say Dumper \%hash;