Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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

by btrott (Parson)
on Apr 26, 2001 at 02:00 UTC ( #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!


    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.
                   s aamecha.s a..a\u$&owag.print

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://75641]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (8)
As of 2018-06-20 16:15 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (116 votes). Check out past polls.