Открыть дескриптор файла или назначить стандартный вывод - PullRequest
6 голосов
/ 14 августа 2011

Я работаю в программе, где пользователь может передать опцию -o file, и затем вывод должен быть направлен в этот файл. В противном случае он должен перейти на стандартный вывод.

Для получения опции я использую модуль getopt long, и это не проблема. Проблема в том, что я хочу создать дескриптор файла с этим файлом или , назначив ему стандартный вывод, если опция не была установлена.

if ($opt) {
    open OUTPUT, ">", $file;
} else {
    open OUTPUT, # ???
}

Это потому, что позже в моем коде я могу просто:

print OUTPUT "...";

Не беспокойтесь, если OUTPUT - это стандартный вывод или файл, указанный пользователем. Это возможно? Если я делаю плохой дизайн, пожалуйста, дайте мне знать.

Ответы [ 2 ]

8 голосов
/ 14 августа 2011

Это был бы хороший пример того, как использовать выберите .

use strict;
use warnings;
use autodie;

my $fh;
if ($opt) {
    open $fh, '>', $file;
    select $fh;
}

print "This goes to the file if $opt is defined, otherwise to STDOUT."
4 голосов
/ 14 августа 2011

Посмотрите документацию open.Самое простое - заново открыть STDOUT и не использовать файловый дескриптор в своем коде.

if ($opt) {
    open(STDOUT, ">", $file);
}
...

print "this goes to $file or STDOUT\n";

(конечно, добавьте некоторую проверку ошибок.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...