Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^2: Uniq and sort in perl

by slayedbylucifer (Scribe)
on Jul 12, 2012 at 09:22 UTC ( #981339=note: print w/replies, xml ) Need Help??

in reply to Re: Uniq and sort in perl
in thread Uniq and sort in perl

Utilitarian, I can't thank you enough. Your solution is **exactly** what I was looking for. Thank you very Much !!

But, unfortunately i am not able to decode or understand your oneliner. Could you guide me to some documentation for the same.

Thanks Again for the lightning fast response.

Replies are listed 'Best First'.
Re^3: Uniq and sort in perl
by Anonymous Monk on Jul 12, 2012 at 10:51 UTC
Re^3: Uniq and sort in perl
by Preceptor (Deacon) on Jul 15, 2012 at 11:26 UTC
    What is happening in that one liner:
    print "$vm, $filer, \n" if ! $seen{"$vm:$filler"}++

    It's quite an elegant piece of code, with a lot going on. So let's break it down:

    • The hash called '%seen' is being checked - to see if it contains a key called "$vm:$filler". The value of this is being tested for being 'false'. (because there's 'if !' which is 'if not') - which is literally 'if not seen'
    • So if $seen{"$vm:filler"} is _not_ 'true' - we haven't seen it, and so we print it.
    • And then that ++ kicks in, to post increment, 'adding one' to $seen{"$vm:$filler"}' - so the first time we try doing that, it's going to be undefined (and thus false) triggering a print. Second time, it'll be 'non zero' and so evaluate as 'true'.
    For bonus points, you can probably do:
    foreach my $key ( keys %seen ) { print "$key was seen $seen{$key} times\n"; }
    Does that make it any clearer?

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2020-12-01 20:08 GMT
Find Nodes?
    Voting Booth?
    How often do you use taint mode?

    Results (20 votes). Check out past polls.