【发布时间】:2016-03-21 13:41:09
【问题描述】:
我有一些数据应该可以很容易地拆分成散列。
以下代码旨在将字符串拆分为其对应的键/值对,并将输出存储在哈希中。
代码:
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 在数组的开头返回了一个额外的空元素。
有没有什么方法可以从拆分输出中丢弃第一个元素并将其存储在一行中的哈希中?
我知道我可以将输出存储在一个数组中,然后将第一个值移出并将数组存储在一个散列中......但我只是好奇这是否可以一步完成.
【问题讨论】: