http://www.perlmonks.org?node_id=75641


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: 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