Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Perl中,@example的$example[n]是何时未定义的?_Arrays_Perl - Fatal编程技术网

Arrays 在Perl中,@example的$example[n]是何时未定义的?

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;

我在编写脚本时遇到的一个一致性问题是返回使用“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;
    } 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";
    }