http://qs321.pair.com?node_id=964548


in reply to Re^2: Common Perl Pitfalls
in thread Common Perl Pitfalls

It always amazes me people prefer downloading a CPAN module, and using it, over writing a one-liner. I'm even more amazed that people think that just because there's a module on CPAN, it automatically is fully debugged and covers all the edge cases.

I do wonder though, if it takes half a day to write:

my $slurp = do {local $/; <HANDLE>};
how long do you need to type in:
use Some::Module::From::CPAN; my $slurp = Some::Module::From::CPAN->some_API(some_argument);
Twice the number of lines, so, a full work day?

Replies are listed 'Best First'.
Re^4: Common Perl Pitfalls
by jdporter (Paladin) on Apr 11, 2012 at 15:15 UTC
    use File::Slurp; my $text = read_file( 'filename' );

    Yeah, that's a whole day's work.
    I submit that finding the documentation on such a method is substantially easier than finding the documentation (for lack of a better word) for the snippet you gave.

    Note.
    The "cost" of useing the module is amortized over all the calls you make to any of its methods (of which File::Slurp has several useful ones).

    And the cost of downloading a module is amortized over all of the times you ever use it (at least on that machine).

      Yeah, that's a whole day's work.
      Maybe not for you or me. But for someone who needs half a day to type
      my $test = do {local $/; <HANDLE>};
      it could easily be.
        half a day to type

        You keep dwelling on that, but I think you're misdirecting. He wrote, "spend half a day writing and debugging code", not "half a day to type in one line".

        If someone has a bug they need to track down, they're far more likely to waste cycles on a line like $_=do{local$/;<>}; than one like $_=read_file($file);

        Now let's compare apples to apples:

        use File::Slurp; my $text = read_file( 'filename' );
        vs
        my $text = do { local $/; open my $fh, '<', 'filename' or die "Error opening filename for read - $!"; <$fh> };

        For most programmers, the former looks sane.