Существует несколько вопросов, о которых вы можете подумать, если вы строго копируете файл, вы можете использовать модуль File :: Copy.
Если вы собираетесь обрабатывать входные данные перед его записью, вы можете также рассмотреть вопрос о том, хотите ли вы одновременно открывать оба файла или вместо этого сначала прочитать весь контент первого файла (в память), а затем напишите его в outfile.
Это зависит от того, что вы делаете внизу.Кроме того, если у вас есть огромный двоичный файл, каждая строка в цикле while может оказаться огромной, поэтому, если память действительно является проблемой, вы можете использовать более низкоуровневое чтение на основе потоков, больше информации об I/O: 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
Начиная с вашего вопроса, делая грубые замечания другим пользователям переполнения стека, я хочу прекратить чтение. Так я и сделал. –
Извините, Грег Хьюджилл. Но в прошлый раз это действительно повредило мне. Это только второй раз, когда я использую переполнение стека. В первый раз, я получил очень плохой комментарий. Надеюсь, что вы понимаете. – Invincible
Извините, что у вас был плохой первый опыт. Тем не менее, я настоятельно рекомендую вам удалить грубые комментарии о других пользователях из этих (и будущих) вопросов. Каждый вопрос в Stack Overflow стоит на собственном опыте, и вы не хотите, чтобы его называли парнем, который всегда говорит о других пользователях в первом абзаце. –