Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: IO::All is sliced bread

by DrWhy (Chaplain)
on Jun 15, 2006 at 20:04 UTC ( [id://555600]=note: print w/replies, xml ) Need Help??


in reply to IO::All is sliced bread

arunbear suggested an example if how IO::All is helpful might be good. So here is one contrived example of making a copy of a file with the text reversed in a cross-patform manner (all code is untested):

without IO:All:

use File::Spec; my $file = File::Spec->catfile('my','dir','my_file.txt'); open (MYFILE, '<', $file) or die "Can't open $file: $!\n"; my @lines = <MYFILE>; close MYFILE; my $rfile = File::Spec->catfile('my','dir','reversed.txt'); open(RFILE, '>', $rfile) or die "Can't open $rfile: $!\n"; print RFILE reverse @lines; close RFILE;
With IO::All:
use IO::All; io->catdir('my','dir','my_file.txt')->backwards > io->catdir('my','dir','reversed.txt');
To my mind the best thing about IO:All is that it takes care of all the error checking related to IO operations as well is the fussiness of opening and closing files in the correct mode for the desired operations.

There are a number of other examples of how this module can be used to make your code simpler and more straightforward in the documentation that comes with IO::All.

update: I misspoke in the opening paragaraph. This example reverses the lines in the file, the whole text is not reversed.

--DrWhy

"If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."

Replies are listed 'Best First'.
Re^2: IO::All is sliced bread
by eric256 (Parson) on Jun 21, 2006 at 17:19 UTC

    Since this is a conrtived example...here is my other contrived example. Not to say IO::All isn't cool, i think many of us are just bigger control freaks and can't stand to guess what the module will do and if it will do the right thing.

    use File::Spec; open (MYFILE, '<', File::Spec->catfile('my','dir','my_file.txt')) or d +ie "Can't open $file: $!\n"; open(RFILE, '>', File::Spec->catfile('my','dir','reversed.txt')) or di +e "Can't open $rfile: $!\n"; print RFILE reverse <MYFILE>;; use IO::All; my $file = io->catdir('my','dir','my_file.txt')->backwards; my $rfile = io->catdir('my','dir','reversed.txt'); $file > $rfile;

    Now if it was IO::DBD::All....just feed it a daatabase and a file of any format and ti does the right thing....well then i might not have much of a job so lets not go there.


    ___________
    Eric Hodges
Re^2: IO::All is sliced bread
by Jaap (Curate) on Jun 21, 2006 at 12:44 UTC
    I thought this example:
    use IO::All; io->catdir('my','dir','my_file.txt')->backwards > io->catdir('my','dir','reversed.txt');
    was wrong until i read the IO::All documentation and found out that the ">" operator is overloaded by IO::All. You might write it more suggestively by saying:
    io->catdir('my','dir','my_file.txt')->backwards > io->catdir('my','dir +','reversed.txt');
      I dunno -- it got you to read about IO::All, didn't it ;)

      Actually, I wrote it that way on purpose because I didn't like the way the line was wrapped by PM when it was all on one line.

      --DrWhy

      "If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://555600]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (1)
As of 2024-04-25 03:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found