Mendapatkan pengecualian dari IO::File?

Modul IO::File, IO::Socket::INET memiliki beberapa keunggulan dibandingkan langsung menggunakan fungsi IO bawaan Perl, seperti memiliki sintaksis eksplisit untuk membersihkan pegangan.

Namun, mereka tampaknya memiliki beberapa kelemahan dibandingkan fungsi IO bawaan. Misalnya, sejauh yang saya tahu mereka tidak dapat digabungkan dengan modul autodie untuk meningkatkan pengecualian pada kegagalan, jadi saya mendapati diri saya harus menulis lebih banyak kode boilerplate secara keseluruhan untuk menangani kegagalan dibandingkan dengan fungsi bawaan.

Apakah ada cara untuk menggabungkan keduanya, atau modul lain yang memiliki fungsi gabungan? Saya memperhatikan beberapa modul IO dengan tujuan terbatas, seperti File::Slurp, memungkinkan penanganan kesalahan yang lebih fleksibel.

Saya sedang menulis kode modul, dan idealnya, solusinya harus berfungsi kembali ke Perl 5.10.0.


person John Dough    schedule 19.12.2013    source sumber
comment
Perhatikan bahwa pegangan file adalah/berisi objek IO::File (dengan perl yang cukup modern, dan mungkin use IO::File untuk memuat metodenya) – sehingga Anda dapat menggunakan bawaan seperti open tanpa melepaskan fitur OOP.   -  person amon    schedule 20.12.2013


Jawaban (1)


Pernahkah Anda melihat Path::Tiny? Sintaksnya berbeda tetapi memberikan pengecualian.

E.G.

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

akan mati dengan objek Path::Tiny::Exception (dengan asumsi Anda tidak memiliki file seperti itu)

person Thomas Erskine    schedule 17.01.2014