in reply to Explain the code

Can anyone explain this code and how its working.

grep applies the block { !$seen{$_}++ } on each element of @a and depending on the result of that application, skips the element or returns it. Inside the block the current element from @a is in $_. The block returns the negation of the value stored under the key $_ in the hash %seen.

Inside the block, in the hash %seen, the value keyed on $_ is at first undefined; it is incremented - but with a post-increment, so on the first occurrence of the hash key stored in $_, the negation (!$seen{$_}) of that undefined (false) value is 1 (or true). So,on the first occurrence the block returns a true value, and the currently evaluated element from @a passes the grep. On the next occurrence of the same hash key the value is already set to a positive integer, which when negated results in a false value - the element doesn't pass the grep.

Yes, I know, the above text needs to be read twice...

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Replies are listed 'Best First'.
Re^2: Explain the code
by chakram88 (Pilgrim) on Jul 24, 2008 at 13:36 UTC
    Yes, I know, the above text needs to be read twice...

    yes, it does --- but it is well worth the read! nicely done shmem++