Как я могу проверить, могу ли я писать в дескриптор файла?

У меня есть несколько подпрограмм, которые я вызываю примерно так 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 вопрос связан, но, похоже, не отвечает на мой вопрос.)

10
задан Community 23 May 2017 в 12:02
поделиться