我有一个数组,并尝试将数组内容转换为带键和值的哈希.索引0是键,索引1是值,索引2是键,索引3是值等.
但它没有产生预期的结果.代码如下:
open (FILE, "message.xml") || die "Cannot open\n";
$var = <FILE>;
while ($var ne "")
{
chomp ($var);
@temp = split (/[\s\t]\s*/,$var);
push(@array,@temp);
$var = <FILE>;
}
$i = 0;
$num = @array;
while ($i < $num)
{
if (($array[$i] =~ /^\w+/i) || ($array[$i] =~ /\d+/))
{
# print "Matched\n";
# print "\t$array[$i]\n";
push (@new, $array[$i]);
}
$i ++;
}
print "@new\n";
use Tie::IxHash;
tie %hash, "Tie::IxHash";
%hash = map {split ' ', $_, 2} @new;
while ((my $k, my $v) = each %hash)
{
print "\t $k => $v\n";
}
Run Code Online (Sandbox Code Playgroud)
产生的输出不正确:
name Protocol_discriminator attribute Mandatory type nibble value 7 min 0 max F name Security_header attribute Mandatory type nibble value 778 min 0X00 max 9940486857
name => Security_header
attribute => Mandatory
type => nibble
value => 778
min => 0X00
max => 9940486857
Run Code Online (Sandbox Code Playgroud)
在输出中,您可以看到散列仅由一个部分组成,而另一部分数组未在散列中创建.
有人可以帮忙吗?
小智 40
没有比它更多:
%hash = @array;
Run Code Online (Sandbox Code Playgroud)
小智 28
在相关的说明,将所有元素转换@array为键的%hash.在这里结束的一些人可能真的想要这个......
这允许使用exists函数:
my %hash;
$hash{$_}++ for (@array);
Run Code Online (Sandbox Code Playgroud)