我在Perl中编写一个脚本,我必须在代码中打开两次相同的文件。这是我的代码大纲:
#!/usr/bin/perl
use strict;
use warnings;
my %forward=();
my %reverse=();
while(<>){
chomp;
# store something
}
}
while(<>){ # open the same file again
chomp;
#print something
}
我正在使用菱形运算符,所以我正在运行这样的脚本
perl script.pl input.txt
但这不会产生任何输出。如果我使用文件句柄打开文件,脚本可以正常工作。这可能有什么问题?
答案 0 :(得分:4)
在耗尽之前保存@ARGV
。当然,这只适用于命令行中指定的实际文件,而不适用于STDIN
。
#!/usr/bin/env perl
use strict;
use warnings;
run(@ARGV);
sub run {
my @argv = @_;
first(@argv);
second(@argv);
}
sub first {
local @ARGV = @_;
print "First pass: $_" while <>;
}
sub second {
local @ARGV = @_;
print "Second pass: $_" while <>;
}
答案 1 :(得分:3)
你在第一个循环中读到了所有要阅读的东西,在第二个循环中没有留下任何东西。
如果输入不是很大,你只需将其加载到内存中即可。
my @lines = <>;
chomp( @lines );
for (@lines) {
...
}
for (@lines) {
...
}