Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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
Perl如何从作为数组元素的文件句柄中读取一行_Perl_File Io - Fatal编程技术网

Perl如何从作为数组元素的文件句柄中读取一行

Perl如何从作为数组元素的文件句柄中读取一行,perl,file-io,Perl,File Io,我的perl脚本获取任意数量的文件,打开它们,并从每个文件中读取一行。但它不起作用。这是我的密码 #!/bin/perl $numfile = scalar @ARGV; for ($i = 0; $i < $numfile; ++$i) { open $fh[$i],"<",$ARGV[$i]; $line[$i] = <$fh[$i]>; } for ($i = 0; $i < $numfile; ++$i) { print "

我的perl脚本获取任意数量的文件,打开它们,并从每个文件中读取一行。但它不起作用。这是我的密码

#!/bin/perl
$numfile = scalar @ARGV;

for ($i = 0; $i < $numfile; ++$i)
{
    open $fh[$i],"<",$ARGV[$i];
    $line[$i] = <$fh[$i]>;
}

for ($i = 0; $i < $numfile; ++$i) 
{ 
    print  "$i => $line[$i]"; 
}

我使用的是PerlV5.18.2

使用
readline
而不是

perlop
说:

如果尖括号内既不是filehandle,也不是包含filehandle名称typeglob的简单标量变量, 或typeglob引用,它被解释为要全局化的文件名模式

您的
被解释为一个文件而不是一个文件

使用以下命令明确指定您的意图:

$line[$i] = readline $fh[$i];

[不是回答,而是不适合作为评论的评论]

始终使用
严格使用;使用警告。没有他们,你就严重妨碍了自己

您不需要使用多个句柄,因为一次不需要多个句柄

其他一些清理:

#!/bin/perl

use strict;
use warnings;

my @first_lines;

for my $qfn (@ARGV)
{
    open(my $fh, '<', $qfn)
        or die("Can't open $qfn: $!\n");

    push @first_lines, scalar( <$fh> );
}

for my $i (0..$#first_lines)
{ 
    print  "$i => $first_lines[$i]"; 
}
#/bin/perl
严格使用;
使用警告;
我的第一行;
我的$qfn(@ARGV)
{
打开(我的$fh,$first_行[$i]”;
}

谢谢你关于strict/warning的建议!我现在就开始使用它们。这段代码是一个更大脚本的一部分,它的目的是合并/排序多个文件。我有几十个文件,每个文件都超过100 Mb。我对每个文件进行单独排序。然后我阅读每个文件的第一行,然后选择“最低”“行,打印它,然后从该文件中读取下一行,并重复,直到所有行都打印出来。
#!/bin/perl

use strict;
use warnings;

my @first_lines;

for my $qfn (@ARGV)
{
    open(my $fh, '<', $qfn)
        or die("Can't open $qfn: $!\n");

    push @first_lines, scalar( <$fh> );
}

for my $i (0..$#first_lines)
{ 
    print  "$i => $first_lines[$i]"; 
}