У меня есть несколько подпрограмм, которые я вызываю примерно так myWrite ($ fileName, \ @data)
. myWrite ()
открывает файл и каким-то образом записывает данные. Я хочу изменить myWrite
, чтобы я мог называть его, как указано выше, или с дескриптором файла в качестве первого аргумента. (Основная причина этого изменения - делегировать открытие файла вызывающему сценарию, а не модулю. Если есть лучшее решение, как указать подпрограмме ввода-вывода, куда писать, я был бы рад это услышать. )
Для этого я должен проверить, является ли первая входная переменная дескриптором файла. Я понял, как это сделать, прочитав этот вопрос .
Теперь вот мой вопрос : я также хочу проверить, могу ли я писать в этот дескриптор файла. Я не могу понять, как это сделать.
Вот что я хочу сделать:
sub myWrite {
my ($writeTo, $data) = @_;
my $fh;
if (isFilehandle($writeTo)) { # i can do this
die "you're an immoral person\n"
unless (canWriteTo($writeTo)); # but how do I do this?
$fh = $writeTo;
} else {
open $fh, ">", $writeTo;
}
...
}
Все, что мне нужно знать, это то, могу ли я писать в дескриптор файла, хотя было бы неплохо увидеть какое-то общее решение, которое сообщит вам, был ли ваш дескриптор файла открыт с помощью «>>» или «
(Обратите внимание, что this вопрос связан, но, похоже, не отвечает на мой вопрос.)