因此,我正在将数据写入哈希%errordata
中。看起来像这样
sub openfile
{
if (open my $data, "<", $filename)
{
my $line = <$data>;
print "Error: $line";
my $dir = cwd;
print "$dir\n";
$errordata{$line} = $dir;
while (my($keys,$values) = each %errordata) {
print "$keys in $values\n";
}
}
我得到的前两个打印输出看起来像这样
FIRST
ERROR: quick brown fox
/abc/efg/hij/klm
SECOND
ERROR: quick brown fox
/abc/efg/hij/gvb
但是每次遇到相同的输出时,它都会覆盖它,但是我想保存路径,因为它可能不同。
FIRST
quick brown fox in /abc/efg/hij/klm
SECOND
quick brown fox in /abc/efg/hij/klm
我应该使用push (@{%hash{"KEYNAME"} }, "new value")
吗?如果是这样,有人可以详细说明吗?我不确定该如何进行。
任何的意见都将会有帮助。谢谢!
答案 0 :(得分:2)
Perl哈希假定每个键都是唯一的。如果您想在一个键下存储多个值或数据结构,则需要应用一些逻辑以实现所需的结果。
请参阅以下演示代码,以根据传入数据对教师和学生进行排序。
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my %people;
my $re = qr/(\S+)\s+(.*)/;
while( <DATA> ) {
my($title,$name) = /$re/;
push @{$people{$title}}, $name;
}
say Dumper(\%people);
while( my($title,$group) = each %people ) {
say ucfirst $title . ':';
say "\t$_" for @{$group};
}
__DATA__
teacher Alex Trump
student Amanda Torry
student Nick Popler
student Jonny Sleeper
student Natalie Simpson
teacher George Magic
student Tom Smarty
teacher Pat Golder
输出
$VAR1 = {
'teacher' => [
'Alex Trump',
'George Magic',
'Pat Golder'
],
'student' => [
'Amanda Torry',
'Nick Popler',
'Jonny Sleeper',
'Natalie Simpson',
'Tom Smarty'
]
};
Teacher:
Alex Trump
George Magic
Pat Golder
Student:
Amanda Torry
Nick Popler
Jonny Sleeper
Natalie Simpson
Tom Smarty