如何仅在while循环内的文件的一行中访问值?

时间:2012-10-16 21:32:48

标签: perl

我有以下文件:

10001;02/07/98;;PI;M^12/12/59^F^^SP^09/12/55
;;;;;M1|F1|SP1;11;10;12;10;12;11;1.82;D16S539
;;;;;M1|F1|SP1;8;8;8;8;10;8;3.45;D7S820
;;;;;M1|F1|SP1;14;12;12;11;14;11;1.57;D13S317
;;;;;M1|F1|SP1;12;12;13;12;13;8;3.27;D5S818
;;;;;M1|F1|SP1;12;12;12;12;12;8;1.51;CSF1PO
.
.
.

当我运行下面的代码时,我会为我的文件的每一行打印一个$indiv[0]值(在这种情况下为M1M1M1M1M1M1...)。我只想使用其中一个值,它可能是第一个,最后一个,等等。我知道我可以在循环外使用print $indiv[0]并获得最后一个,但事实并非如此,{{1这里只是一个例子,我需要在循环中使用该值进行其他计算。

那么,我怎么才能只访问一个值(只有一行),将它保持在while循环中?

提前致谢!

print

1 个答案:

答案 0 :(得分:2)

只需输入一个常用的习惯用法来过滤重复项。

#!/usr/bin/perl
use warnings;
use strict;

my %seen;
while (<>) {
    chomp;
    my @field = split /;/;
    if ($field[0] eq '') {
        my ($foo) = split /\|/, $field[5];  
        if (!$seen{$foo}++) {
            print "$foo\n";
        }
    }
}