【发布时间】:2010-11-17 07:03:26
【问题描述】:
我在如何打印我的哈希内容时遇到了麻烦。
将sn-p编码成这样,
#!/usr/bin/perl -w
use strict;
use warnings;
my (%data, $keyword);
while (my $line = <DATA>){
next unless $line =~ /\S/;
chomp $line;
if ($line =~ /^Keyword/){
$keyword = $line;
}
else {
push @{$data{$keyword}}, $line;
}
}
# How to sort by keys using while loop?
while ( my ($k,$v) = each %data ) {
print "$k => $v\n";
}
# BTW, foreach loop sorting works.
#foreach my $key (sort (keys(%data))) {
# print "$key \t$data{$key}\n";
#}
__DATA__
Keyword1
data1 a
Keyword2
data2 a
data2 b
data2 c
Keyword3
data3 a
data3 b
Keyword4
data4 a
data4 b
输出:
D:\learning\perl>sc4.pl
Keyword3 => ARRAY(0x18418fc)
Keyword1 => ARRAY(0x28925c)
Keyword2 => ARRAY(0x2892fc)
Keyword4 => ARRAY(0x184360c)
实际上,我认为 Keyword1 的值(data1 a,只有一行)不是 ARRAY。但输出仍然显示它是一个数组。
你能给我一些关于如何正确打印的建议吗?
感谢您的意见。
[更新]
我更新了while loop 的代码以尝试打印值数组。但还是失败了。
while ( my ($k,@v) = each %data ) {
print "$k\n";
foreach (@v) {
print Dumper (@v);
print "$_\n";
}
}
输出:
D:\learning\perl>sc4.pl
Keyword3
$VAR1 = [
'data3 a',
'data3 b'
];
ARRAY(0x189a674)
Keyword1
$VAR1 = [
'data1 a'
];
ARRAY(0x28925c)
Keyword2
$VAR1 = [
'data2 a',
'data2 b',
'data2 c'
];
ARRAY(0x2892fc)
Keyword4
$VAR1 = [
'data4 a',
'data4 b'
];
ARRAY(0x1841a74)
我已经定义了另一个包含在 while 循环中的 foreach 循环来处理数组值。但效果不好。我不知道为什么?
【问题讨论】:
-
是的,即使关键字 1 的值也是一个数组,因为您推送数组
$data{$keyword}- 创建数组。