Perl循环遍历数组的哈希

时间:2015-04-03 17:22:16

标签: arrays perl hash

我如何循环第一行中的每个元素,然后移动到第二行,依此类推...... 下面的脚本有点工作,但我没有获得所需的输出。 有人可以帮助我。

的test.txt

ABC-13077 817266 55555
ABC-13092 816933
CAMC-13093 817361

script.pl

#!/usr/bin/perl -w
use strict;

my %hash = ();
my $file = "test.txt";

open (my $fh, "<", $file) or die "Can't open the file $file: ";

while (my $line =<$fh>)
{
    chomp ($line);
    my($key) = split(/\+s/, $line);
    $hash{$key} = 1;
}

foreach my $key (keys %hash)
{
    print "$key\n";
    print "loop\n";
}

当前output.txt

ABC-13077 817266 55555
loop
ABC-13092 816933
loop    
CAMC-13093 817361

所需的output.txt

ABC-13077
817266 
55555
loop
ABC-13092 
816933
loop    
CAMC-13093 
817361

1 个答案:

答案 0 :(得分:1)

首先,您需要将/\+s/更改为/\s+/

其次,您可以将数据存储到数组哈希(perldsc):

use warnings;
use strict;
my %hash = ();

while (my $line =<DATA>)
{
    chomp ($line);
    my ($key, @vals) = split(/\s+/, $line);
    $hash{$key} = [@vals];
}

foreach my $key (sort keys %hash)
{
    print "$key\n";
    print "$_\n" for @{ $hash{$key} };
    print "loop\n";
}

__DATA__
ABC-13077 817266 55555
ABC-13092 816933
CAMC-13093 817361

输出:

ABC-13077
817266
55555
loop
ABC-13092
816933
loop
CAMC-13093
817361
loop