Есть пара вопросов, о которых вы можете подумать, если вы строго копируете файл, вы можете использовать модуль File :: Copy.
Если вы собираетесь обработать ввод перед его записью, вы также можете подумать, хотите ли вы сохранить оба файла открытыми одновременно или вместо этого сначала прочитать все содержимое первого файла (в память), а затем запишите его в файл.
Это зависит от того, что вы делаете под ним.Также, если у вас огромный двоичный файл, каждая строка в цикле while может оказаться огромной, поэтому, если память действительно является проблемой, вы можете использовать более низкоуровневое потоковое чтение, больше информации о вводе / выводе: http://oreilly.com/catalog/cookbook/chapter/ch08.html
Я бы предложил использовать метод очистки PBP следующим образом:
#!/usr/bin/perl
use strict;
use warnings;
use English qw(-no_match_vars);
my $in_file = 'text3.txt';
my $out_file = 'text4.txt';
open my $in_fh, '<', $in_file or die "Unable to open '$in_file': $OS_ERROR";
open my $out_fh, '>', $out_file or die "Unable to open '$out_file': $OS_ERROR";
while (<$in_fh>) {
# $_ is automatically populated with the current line
print { $out_fh } $_ or die "Unable to write to '$out_file': $OS_ERROR";
}
close $in_fh or die "Unable to close '$in_file': $OS_ERROR";
close $out_fh or die "Unable to close '$out_file': $OS_ERROR";
ИЛИ просто распечатать весь файл напрямую:
#!/usr/bin/perl
use strict;
use warnings;
use English qw(-no_match_vars);
my $in_file = 'text3.txt';
my $out_file = 'text4.txt';
open my $in_fh, '<', $in_file or die "Unable to open '$in_file': $OS_ERROR";
open my $out_fh, '>', $out_file or die "Unable to open '$out_file': $OS_ERROR";
local $INPUT_RECORD_SEPARATOR; # Slurp mode, read in all content at once, see: perldoc perlvar
print { $out_fh } <$in_fh> or die "Unable to write to '$out_file': $OS_ERROR";;
close $in_fh or die "Unable to close '$in_file': $OS_ERROR";
close $out_fh or die "Unable to close '$out_file': $OS_ERROR";
Кроме того, если вы просто хотите быстро применить регулярное выражение или аналог к файлу, вы можете посмотреть ключ -i команды perl: perldoc perlrun
perl -p -i.bak -e 's/foo/bar/g' text3.txt; # replace all foo with bar in text3.txt and save original in text3.txt.bak