我有一些数据应该可以很容易地分成哈希.
以下代码旨在将字符串拆分为其对应的键/值对,并将输出存储在散列中.
码:
use Data::Dumper; # create a test string my $string = "thing1:data1thing2:data2thing3:data3"; # Doesn't split properly into a hash my %hash = split m{(thing.):}, $string; print Dumper(\%hash);
但是,在检查输出时,很明显该代码不能按预期工作.
输出:
$VAR1 = { 'data3' => undef, '' => 'thing1', 'data2' => 'thing3', 'data1' => 'thing2' };
为了进一步研究这个问题,我将输出分成一个数组,然后打印出结果.
码:
# There is an extra blank element at the start of the array my @data = split m{(thing.):}, $string; for my $line (@data) { print "LINE: $line\n"; }
输出:
LINE: LINE: thing1 LINE: data1 LINE: thing2 LINE: data2 LINE: thing3 LINE: data3
正如您所看到的那样,问题是split
在数组的开头返回一个额外的空元素.
有什么办法可以将分割输出中的第一个元素丢弃并将其存储在一行的哈希中?
我知道我可以将输出存储在一个数组中然后只是移出第一个值并将数组存储在一个哈希中...但我只是好奇这是否可以一步完成.
my (undef, %hash) = split m{(thing.):}, $string;
将扔掉第一个值.