我在脚本编写时遇到的一致问题是返回使用未初始化的值" 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。
答案 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";
}
米勒的回答也是有效的;你对文件句柄的使用是非常规的。