Есть трюк eof
, но удача, объясняя это людям. Я обычно нахожу, что хочу что-то сделать со старым именем файла.
В зависимости от того, что вы хотите сделать, вы можете отслеживать имя файла, над которым работаете, чтобы вы могли распознать его при переходе на новый файл. , Таким образом, вы знаете оба имени одновременно:
use v5.10;
my %line_count;
my $current_file = $ARGV[0];
while( <> ) {
if( $ARGV ne $current_file ) {
say "Change of file from $current_file to $ARGV";
$current_file = $ARGV;
}
$line_count{$ARGV}++
}
use Data::Dumper;
say Dumper( \%line_count );
Теперь вы видите, когда файл изменяется, и вы можете использовать $ARGV
Change of file from cache-filler.pl to common.pl
Change of file from common.pl to wc.pl
Change of file from wc.pl to wordpress_posts.pl
$VAR1 = {
'cache-filler.pl' => 102,
'common.pl' => 13,
'wordpress_posts.pl' => 214,
'wc.pl' => 15
};
В зависимости от того, что я делаю Я мог бы не позволить оператору бриллиантов сделать всю работу. Это дает мне намного больше контроля над тем, что происходит, и как я могу реагировать на вещи:
foreach my $arg ( @ARGV ) {
next unless open my $fh, '<', $arg;
while( <$fh> ) {
...
}
}