Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: (Ovid - accidental obfuscation?)Re: Perverse Unreadable Code

by btrott (Parson)
on Apr 26, 2001 at 02:00 UTC ( [id://75641]=note: print w/replies, xml ) Need Help??


in reply to (Ovid - accidental obfuscation?)Re: Perverse Unreadable Code
in thread Perverse Unreadable Code

Re: your code--I think that were I presented with the same problem I'd probably do it like this:
my %author; while (<FH>) { next unless /^\d{6}=[^|]+\|/; my($l, $r) = split /=/, $_, 2; $author{$l} = [ split /\|/, $r, 2 ]; }
I don't like temporary variables much, either, but this, to me, seems:
  • more readable
  • more efficient, both in terms of memory and "algorithm". Your code loops over the data three times (I think); the above would loop over it only once. Furthermore, your code loads the entire contents of FH into memory at the same time, while the above processes the file line by line.
I'm not trying to bash you or anything. :) Readability is often a rather subjective thing, for one thing, and if you find your code more readable, that's fine.

In terms of efficiency, though, I think the while loop probably beats a grep-map-map operation (read in reverse), unless there are other issues I'm not thinking about.

Replies are listed 'Best First'.
Re: Re: (Ovid - accidental obfuscation?)Re: Perverse Unreadable Code
by Ovid (Cardinal) on Apr 26, 2001 at 02:15 UTC
    This is a beautiful example of how we can mentally get into a rut and not "rethink" things. Your code is much easier to understand. Thanks!

    Cheers,
    Ovid

    Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.

Re: Re: (Ovid - accidental obfuscation?)Re: Perverse Unreadable Code
by MeowChow (Vicar) on Apr 26, 2001 at 02:47 UTC
    Funny, I was thinking virtually the same thing myself looking at his code, but more along the lines of:
    my %author; while (<FH>) { next unless /^(\d{6})=([^|]+?)\|(.*)/; $author{$1} = [ $2, $3 ]; }
    Though perhaps I've missed something here.
       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2024-04-25 23:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found