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}
In reply to Re: Explain the code
by shmem
in thread Explain the code
by rose
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |