Когда вы открываете файл, то, к чему еще прикреплен дескриптор файла, закрывается первым.Начиная с close
Вам не нужно закрывать FILEHANDLE, если вы немедленно собираетесь сделать еще одно открытие, потому что open закрывает его для вас.
Так что вы можете сделать
open my $fh, '<', $file or die "Can't open $file: $!";
...
open $fh, '>', $out_file ...
...
open $fh, '>', $another_file ...
Это лишает вас возможности проверять ошибки на close $fh
, что не , выполненное с автоматическимблизко.Кроме того, счетчик строки $.
не сбрасывается таким образом.
Однако дескриптор файла не может быть объявлен повторно, как показывает показанный код.Будучи обычной лексической переменной, вы можете иметь только одну декларацию my
в данной области.
Или вы можете написать подпрограмму, которая открывает файл или записывает его вообще.
Наконец, есть модули, которые уменьшают код до одной строки, например Path :: Tiny
use Path::Tiny;
...
path($file)->spew(@data);
, который также хорошо проверяет ошибки и выкрикивает, если что-то не так.