-
Notifications
You must be signed in to change notification settings - Fork 20
Home
IO::All combines all of the best Perl IO modules into a single nifty object oriented interface to greatly simplify your everyday Perl IO idioms. It exports a single function called io, which returns a new IO::All object. And that object can do it all!
The IO::All object is a proxy for IO::File, IO::Dir, IO::Socket, Tie::File, File::Spec, File::Path, File::MimeInfo and File::ReadBackwards; as well as all the DBM and MLDBM modules. You can use most of the methods found in these classes and in IO::Handle (which they inherit from). IO::All adds dozens of other helpful idiomatic methods including file stat and manipulation functions.
IO::All is pluggable, and modules like IO::All::LWP and IO::All::Mailto add even more functionality. Optionally, every IO::All object can be tied to itself. This means that you can use most perl IO builtins on it: readline, <>, getc, print, printf, syswrite, sysread, close.
The distinguishing magic of IO::All is that it will automatically open (and close) files, directories, sockets and other IO things for you. You never need to specify the mode (<, >>, etc), since it is determined by the usage context. That means you can replace this:
open STUFF, '<', './mystuff'
or die "Can't open './mystuff' for input:\n$!";
local $/;
my $stuff = <STUFF>;
close STUFF;
with this:
my $stuff < io './mystuff';
And that is a good thing!
Normally just say:
use IO::All;
and IO::All will export a single function called io, which constructs all IO objects.
The io function is a magic constructor. It is easy to use and will usually do the right thing, but can also blow up easily.
It takes a single optional argument and determines what type of IO::All subclass object to return. With no arguments it returns an IO::All object, which has no I/O methods, but has methods to construct subclass objects like IO::All::File.
In other words, these 2 statements are usually the same:
$content = io('file.txt')->all;
$content = io->file('file.txt')->all;
Use the first form when you are demonstrating your Perl virtues of laziness and impatience, and use the second form when your job is on the line.