我怎么知道钻石操作符是否移动到下一个文件?

Jim*_*Jim 4 perl diamond-operator

我在文件中有以下代码perl_script.pl

while (my $line = <>) {
    chomp $line;
   // etc. 
}. 
Run Code Online (Sandbox Code Playgroud)

我用超过 1 个文件调用脚本,例如

perl perl_script.pl file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

有没有办法知道是否$line开始从file2.txt等读取?

zdi*_*dim 12

$ argv变量

读取时包含当前文件的名称 <>

并且您可以在每一行上保存名称和测试以查看它是否更改,并在更改时更新。

如果它真的只是为了获取特定文件,正如问题似乎所说的那样,那么它会更容易,因为您还可以使用@ARGV包含命令行参数的 来直接测试所需的名称。


另一种选择是使用eof(不带括号的形式!)来测试文件结尾,这样您就会知道下一个文件将在下一次迭代中出现——因此您还需要某种标志。

对此的一个变体是在每个文件的末尾显式关闭文件句柄,以便$.为每个新文件重置,通常不会发生在<>, 然后$. == 1是新打开文件的第一行

while (<>) { 
    if ($. == 1) { say "new file: $ARGV" }
} 
continue { 
    close ARGV if eof;
} 
Run Code Online (Sandbox Code Playgroud)