引用数组perl中的列

时间:2013-06-26 09:56:55

标签: arrays perl

我有一个包含多行和多列数据的文件。我需要读取文件并在特定列与特定数字匹配时打印。

这就是我在下面的内容,目前我没有得到任何结果:

my $old_flag = 'file1.txt';
my $new_flag = 'file2.txt';

open (IN, "<$old_flag");
open (OUT, "+>$new_flag");

my @data = <IN>;

for (@data) {
    my @old_flag;
    chomp;
    @old_flag = split /\t/, $_;
    push (@records, @old_flag);
}

foreach my $record (@records) {
    if($record[2] == 11125) {
        print OUT "$record[2]\n";
    } else {
        next;
    }
}

1 个答案:

答案 0 :(得分:4)

你可能认为你是通过这样做来创建一个二维数组

push (@records, @old_flag);

但实际上你只是将值推到常规数组上。在这里,您认为您正在访问二维数组

foreach my $record(@records){
    if($record[2] == 11125) {

但实际上,您只是在每次循环迭代时检查相同的不存在的数组元素。您看到$record$record[2]引用了两个不同的变量。后者只是@record数组的第三个元素。你从未宣称过。如果您使用过use strict,则会收到错误:

Global symbol "@record" requires explicit package name at foo.pl line 12

你可以做些什么来解决它:

push @records, \@old_flag;    # works because @old_flag is a lexical variable
...
foreach my $record (@records) {
    if($record->[2] == 11125) {

在这里,您将$record视为数组引用,它就是。

您遇到这些问题是因为您没有使用

use strict;
use warnings;

这两个pragma有一定的学习曲线,但它们会阻止你犯错误和拼写错误,并会减少你的调试时间。