0x0009 Redirecting output to file. Перенаправление вывода в файл
Говоря о вариантах вывода информации, необходимо сказать о том, что в большинстве случаев, для программистов гораздо удобнее бывает работать с информацией, выведенной не на экран монитора, а в файл.
Именно по этой причине в таких системах, как UNIX, Linux и подобных уже много лет назад была реализована возможность перенаправления вывода информации в файл, через специальные операторы перенаправления, с указанием имени определённого файла. Интересно, что сам файл может и не существовать, поскольку, будучи указанным в качестве адресата при перенаправлении вывода информации в него, он создаётся автоматически.
В данном примере используется модуль IO::Handle. Подробнее на CPAN.
Что самое приятное – файлы можно использовать раздельно для потока вывода (STDOUT), а ввода (STDIN) и ошибок (STDERR).
open INPUT, '<', "data.in" or die $!;
open OUTPUT, '>', "work.log" or die $!;
open ERROR, '>', "error.log" or die $!;
STDIN->fdopen(\*INPUT, 'r') or die $!;
STDOUT->fdopen(\*OUTPUT, 'w') or die $!;
STDERR->fdopen(\*ERROR, 'w') or die $!;
# Сообщение дописывается в файл work.log
print "Начинаем работу...\n";
# Сообщение дописывается в error.log
warn "Что-то случилось. Завершение работы";
close INPUT;
close OUTPUT;
close ERROR;