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 |