december has asked for the wisdom of the Perl Monks concerning the following question:
Hello, fellow monks;
I've gotten some strange results for some code I'm writing. I've made a short test case which I hope somebody can explain the results of to me.
Output:use strict; use warnings; my @arr = ('one', 'apple', 'two', 'apple', 'three'); my $var; my $matches = 0; foreach my $el (@arr) { (defined($var) ? $var .= 'y' : $var .= 'n') if $el eq 'apple'; $matches++ if $el eq 'apple'; } print "$var\n"; print "$matches\n"; $var = 'x'; $matches = 0; foreach my $el (@arr) { (defined($var) ? $var .= 'y' : $var .= 'n') if $el eq 'apple'; $matches++ if $el eq 'apple'; } print "$var\n"; print "$matches\n";
nyn 2 xynyn 2
Nevermind rewriting the code bringing the assignment/appending operator outside of the comparison. I would like to know why this specific code prints such strange results (I would expect 'ny' for the former and 'xyy' for the latter fragment).
I understand '=' and '.=' can return something, but I don't understand how it gets assigned back to $var or why the non-matching part of the conditional gets executed.
What am I missing here?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: strange output from conditional operator
by moritz (Cardinal) on May 15, 2009 at 11:43 UTC | |
by december (Pilgrim) on May 15, 2009 at 12:23 UTC | |
by moritz (Cardinal) on May 15, 2009 at 12:31 UTC | |
by JadeNB (Chaplain) on May 15, 2009 at 21:53 UTC |
Back to
Seekers of Perl Wisdom