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;