Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: while(<>) { ... } considered harmful

by Juerd (Abbot)
on Sep 08, 2002 at 00:55 UTC ( #195947=note: print w/ replies, xml ) Need Help??


in reply to while(<>) { ... } considered harmful

map { require Net::DNS } 1;

Is that a map in void context? Nasty and evil. (I don't recall require ever returning anything useful.)

Personally I prefer always using while(my $line = <>) construct.

I don't always. Setting $_ lets one use regexes and simple commands easier. I do use a lexical for more complicated blocks, but I often find myself just slurping the file into an array first.

- Yes, I reinvent wheels.
- Spam: Visit eurotraQ.


Comment on Re: while(<>) { ... } considered harmful
Re(2): while(<>) { ... } considered harmful
by FoxtrotUniform (Prior) on Sep 08, 2002 at 01:24 UTC
        map { require Net::DNS } 1;
      Is that a map in void context? Nasty and evil.

    I believe that's a minimal demonstration of a bug, rather than "real" code.

    On the subject of while(<>) vs. while(my $line = <>), I tend to prefer the former:

    • If I don't have to do much processing for each line, it's usually much nicer to work on $_, as Juerd points out.
    • If I do have a lot of work to do, it's usually in a subroutine call, where this sort of thing isn't an issue (since the scope has changed).

    I haven't really thought about it, but if a loop's so complex that you have to assign to an explicit iterator variable just to figure out what's going on (as opposed to a loop where defaulting to $_ would be inappropriate for other reasons), it's probably an indication that the loop needs simplifying.

    --
    F o x t r o t U n i f o r m
    Found a typo in this node? /msg me
    The hell with paco, vote for Erudil!

      I believe that's a minimal demonstration of a bug, rather than "real" code.

      You are right. Real code looks like:

      my @other_connectors = map $ad_obj->connector(field => $_), qw(header description region country state);
      No require on the surface. It was deeply hidden in one of method calls. I though it was just a Perl bug when I got that error for first time.

      --
      Ilya Martynov (http://martynov.org/)

Re: Re: while(<>) { ... } considered harmful
by schwern (Scribe) on Aug 07, 2003 at 21:40 UTC
    require returns the last evaluated expression in the file. Normally this is 1, but I've seen people do wacky things like have "return %hash" as the last expression and do "%hash = require Foo::Bar";

      Since my post, I have used eval { require ... } ? ...->import : *symbol = sub { dummy here } a lot.

      Juerd # { site => 'juerd.nl', plp_site => 'plp.juerd.nl', do_not_use => 'spamtrap' }

      require returns the last evaluated expression in the file

      Only the first time:

      > perl -de 0 ... DB<1> x require 'con' 'this is true'; ^Z 0 'this is true' DB<2> x require 'con' 0 1 DB<3> x require 'con' 0 1 DB<4>
      I've seen people do wacky things like have "return %hash" as the last expression and do "%hash = require Foo::Bar";

      So such code will break as soon as more than one use of the module is attempted from a single run. That's a bit of a shame too, since Perl could really use something along those lines.

                      - tye

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2015-07-07 06:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (87 votes), past polls