Perl中@example的$ example [n] undef是什么时候?

时间:2014-06-11 19:25:11

标签: arrays perl

我在脚本编写时遇到的一致问题是返回使用未初始化的值" x"在'。当我尝试从先前定义的数组中获取特定值时,最常发生这种情况。一个例子可以在下面找到:

my $in = $ARGV[0];

open $in, '<', 'input.txt';

for my $i ( 1 .. 10 ) {
    my @line = ( split ' ', <$in> );
    if ( $line[0] ne qw(Temperature) ) {
        next;
    } else {
        print "$line[1]\n";
    }
}

我已确定数据是通过打印命令输入@line数组的,但无法理解为什么我无法调用该数组中的第一项和第二项。

编辑: 输入文件格式:     100个动态步骤中最后100个的平均值

Simulation Time              0.1000 Picosecond
Total Energy                59.7313 Kcal/mole   (+/-   1.9942)
Potential Energy           -68.6523 Kcal/mole   (+/-   3.9487)
Kinetic Energy             128.3835 Kcal/mole   (+/-   3.8432)
Intermolecular            -199.2242 Kcal/mole   (+/-   1.7462)
Temperature                  124.12 Kelvin      (+/-     3.72)

重复x10000。

2 个答案:

答案 0 :(得分:3)

不要假设您的文件总是有10行输入。而是迭代文件。

use strict;
use warnings;
use autodie;

#my $in = $ARGV[0];

open my $fh, '<', 'input.txt';

while (my $line = <$fh>) {
    last if $. > 10;

    my @cols = split ' ', $line;

    next if $cols[0] ne 'Temperature';

    print "$cols[1]\n";
}

答案 1 :(得分:0)

您打印该行,但您不知道该阵列已定义。

my @line = ( split ' ', <$in> );
next unless ( @line )
if ( $line[0] ne qw(Temperature) ) {
        next;
    } else {
        print "$line[1]\n";
    }

米勒的回答也是有效的;你对文件句柄的使用是非常规的。