in reply to What does !$saw{$_}++ means
Here's my interpretation :
%saw is a hash.
$saw{$_} is the value in this hash associated with the key $_
$saw{$_}++ increases this value by 1
!$saw{$_} is a logical which means "there is no value associated with the key $_ in %saw" .
Now, this is used inside a grep applied to @in : this means that $_ will take each of the value in @in . Let's take the first value of @in : obviously it's not yet in %saw so the conditional !$saw{$_} is TRUE (it's a double negation) . Therefore grep validates and this first value goes into @out.
At this time a little magic happens : after evaluation of !$saw{$_} the ++ is applied . I'm only guessing this happens because of some precedence of ! over ++ .
So what if the second element of @in is the same as the first ? Well, since ++ happened , $saw{$_} will have a value of 1 and therefore !$saw{$_} will be FALSE : you will not get this repetition in the final @out .
Hope this helps,
ZlR .
Question : I just checked in the camel book:
the ! opertor has an arity of 1 and is right associative
the ++ operator also has an arity of 1 but is not associative.
I'm not sure then why the !$saw{$_}++ is correctly evaluated since they have the same arity.
Answer by ysth : nothing to do with arity , it's just that ! has higher precedence than ++ .
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: What does !$saw{$_}++ means
by tphyahoo (Vicar) on Jan 26, 2005 at 09:05 UTC | |
by ZlR (Chaplain) on Jan 26, 2005 at 09:13 UTC | |
|
Re^2: What does !$saw{$_}++ means
by ysth (Canon) on Jan 26, 2005 at 10:12 UTC | |
by ZlR (Chaplain) on Jan 26, 2005 at 10:36 UTC |