Arrays 在Perl中,@example的$example[n]是何时未定义的?
我在编写脚本时遇到的一个一致性问题是返回使用“y”中的未初始化值“x”。当我试图从以前定义的数组中获取特定值时,最常发生这种情况。下面是一个例子:Arrays 在Perl中,@example的$example[n]是何时未定义的?,arrays,perl,Arrays,Perl,我在编写脚本时遇到的一个一致性问题是返回使用“y”中的未初始化值“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;
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";
}
}
重复x10000。不要假设您的文件总是有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";
}
使用严格;
使用警告;
使用自动模具;
#my$in=$ARGV[0];
打开my$fh,“打印行,但不知道数组已定义
my @line = ( split ' ', <$in> );
next unless ( @line )
if ( $line[0] ne qw(Temperature) ) {
next;
} else {
print "$line[1]\n";
}
my@line=(拆分“”,);
下一个除非(@line)
如果($line[0]ne qw(温度)){
下一个
}否则{
打印“$line[1]\n”;
}
米勒的回答也是正确的;您对文件句柄的使用是非常规的。谢谢@mob。抱歉,只是编辑有点慢。愚蠢的比赛条件。如果是这样的话,最好让oen知道是否有其他人打开了一篇文章进行编辑,以及它是谁。:)谢谢你的指导。它仍然在给我一些未初始化的值提示,所以我合并了Neil关于next除非(@line)的答案。这将删除所有错误,但不幸的是没有打印任何内容。。。我将把输入文件格式放在op中。如果没有理由限制文件的10行,您可以删除while循环的第一行。也许这就是你看不到结果的原因。没关系,我已经修好了。op中的1..10是一个任意数字,因为我不想用数千个错误填充我的终端。删除最后一个if$。>10; 允许脚本按预期运行。谢谢!谢谢你的建议,下一步很有用。
my @line = ( split ' ', <$in> );
next unless ( @line )
if ( $line[0] ne qw(Temperature) ) {
next;
} else {
print "$line[1]\n";
}