Получение исключений из IO::File?

Модули IO::File, IO::Socket::INET имеют некоторые преимущества по сравнению с прямым использованием встроенных в perl функций ввода-вывода, например наличие явного синтаксиса для сброса дескриптора.

Однако они имеют некоторые недостатки по сравнению со встроенными функциями ввода-вывода. Например, насколько я могу судить, их нельзя комбинировать с модулем autodie для создания исключений при сбоях, поэтому мне приходится писать в целом больше стандартного кода для обработки сбоев, чем со встроенными функциями.

Есть ли способ объединить два или некоторые другие модули, которые имеют объединенную функциональность? Я заметил, что некоторые модули ввода-вывода ограниченного назначения, такие как File::Slurp, обеспечивают более гибкую обработку ошибок.

Я пишу код модуля, и в идеале решение должно работать вплоть до perl 5.10.0.


person John Dough    schedule 19.12.2013    source источник
comment
Обратите внимание, что дескрипторы файлов в любом случае являются/содержат объекты IO::File (учитывая достаточно современный perl и, возможно, use IO::File для загрузки методов) — поэтому вы можете использовать встроенные функции, такие как open, не отказываясь от функций ООП.   -  person amon    schedule 20.12.2013


Ответы (1)


Вы смотрели на Path::Tiny? Синтаксис отличается, но он генерирует исключения.

E.G.

use Path::Tiny;
path('/non/existent/file')->openr;

умрет с объектом Path::Tiny::Exception (при условии, что у вас нет такого файла)

person Thomas Erskine    schedule 17.01.2014