use IO::All; # Some of the many ways to read a whole file into a scalar io('file.txt') > $contents; # Overloaded "arrow" $contents < io 'file.txt'; # Flipped but same operation $io = io 'file.txt'; # Create a new IO::All object $contents = $$io; # Overloaded scalar dereference $contents = $io->all; # A method to read everything $contents = $io->slurp; # Another method for that $contents = join '', $io->getlines; # Join the separate lines $contents = join '', map "$_\n", @$io; # Same. Overloaded array deref $io->tie; # Tie the object as a handle $contents = join '', <$io>; # And use it in builtins # Other file operations: @lines = io('file.txt')->slurp; # List context slurp $content > io('file.txt'); # Print to a file io('file.txt')->print($content, $more); # (ditto) $content >> io('file.txt'); # Append to a file io('file.txt')->append($content); # (ditto) $content << $io; # Append to a string io('copy.txt') < io('file.txt'); # Copy a file io('file.txt') > io('copy.txt'); # Invokes File::Copy io('more.txt') >> io('all.txt'); # Add on to a file ... # Miscellaneous: @lines = io('file.txt')->chomp->slurp; # Chomp as you slurp $binary = io('file.bin')->binary->all; # Read a binary file io('a-symlink')->readlink->slurp; # Readlink returns an object print io('foo')->absolute->pathname; # Print absolute path of foo # IO::All External Plugin Methods io("myfile") > io->("ftp://store.org"); # Upload a file using ftp $html < io->http("www.google.com"); # Grab a web page io('mailto:email@example.com')->print($spam); # Email a "friend"
IO::All combines a lot of Perl's IO modules into one package. It is very expressive and terse at the same time. This is handy in one liners or small "throw away" scripts. Like Scalar::Andand (day 10) I would not use it in production code.
PS: Originally I wanted to write about Chart::Clicker, but installation problems delayed it. Now I'm glad - I found this extensive article today: Charting Weather with Chart::Clicker.