Perl如何从作为数组元素的文件句柄中读取一行
我的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 "
#!/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]";
}