Во-первых, всегда используйте строгий и Предупреждения.
Если все, что вам нужно сделать, это скопировать один файл в другой, используйте File::Copy:
use strict;
use warnings;
use feature qw(say);
use File::Copy;
my $file1 = "...";
my $file2 = "...";
copy $file1, $file2 or die qq(Can't copy '$file1' to '$file2');
Или, вы можете сначала открыть файлы. Это удобно, если вы уже манипулируя сами файлы:
use strict;
use warnings;
use autodie;
use feature qw(say);
use File::Copy;
my $file1 = "...";
my $file2 = "...";
open my $fh1, "<", $file1;
open my $fh2, ">", $file2;
copy $fh1, $fh2;
В этом втором примере, я use autodie
. Этот pragma заставит вашу программу прервать работу файла. Таким образом, вам не нужно продолжать делать or die qw(...);
после каждого открытия файла, закрытия его или записи на него.
use File::Copy
импортирует команды copy
и move
в Perl. Это Стандартный модуль, что означает, что вы можете использовать его, не беспокоясь о том, будет ли он работать или не будет работать в конкретной системе.
Вы не читаете данные1. вы пишете кучу вещей, оставьте указатель файла на END данных1, а затем попробуйте прочитать его. ну, вы уже в EOF, так что читать нечего. –