Arrays 将数组的内容移动到散列中

Arrays 将数组的内容移动到散列中,arrays,perl,hash,Arrays,Perl,Hash,我的数组具有lib1 ver1 lib2 ver2 lib3 ver3 我想将数组的内容分配给一个散列,这样我的散列就有lib1作为键,ver1作为相应的值 lib1=>ver1 lib2=>ver2..所以当我使用foreach打印内容时 foreach my $key (keys %hash) { print("Key is $key and value is $hash{$key}\n"); 应该打印出来 键为lib1,值为ver1 键是lib2,值是ver2,如果您有,

我的数组具有lib1 ver1 lib2 ver2 lib3 ver3

我想将数组的内容分配给一个散列,这样我的散列就有lib1作为键,ver1作为相应的值 lib1=>ver1 lib2=>ver2..所以当我使用foreach打印内容时

foreach my $key (keys %hash) {
        print("Key is $key and value is $hash{$key}\n");
应该打印出来 键为lib1,值为ver1
键是lib2,值是ver2,如果您有,请查看您的原始帖子

my $lib_version = 'lib1=ver1 lib2=ver2 lib3=ver3'
然后像这样分开

my @array = split /=/, $lib_version
不会按你的意愿分割。你最终会得到

@array = ('lib1', 'ver1 lib2', 'ver2 lib3', 'ver3')
因为您仅在等号
=
上拆分

要同时在
=
和空格上拆分,可以编写

my @array = split /[\s=]/, $lib_version
或者更好

my @array = $lib_version =~ /[^=\s]+/g

在那之后,
my%hash=@array
就可以正常工作了

m/\S+=\S+/\S+
不是一个有效的正则表达式。而且
lib1=ver1 lib2=ver2 lib3=ver3
不是有效的Perl代码。不,你认为你的数组中有上面的字符串,但我猜你的数组中没有这些字符串,这就是为什么你的作业
%foo=@bar
不起作用,而它应该起作用。这让我回到我的请求:
使用数据::转储程序$数据::转储程序::Useqq=1;打印转储程序\@数组
如果数组中有,则可以安全地将其分配给散列并获得预期结果。