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?
In reply to strange output from conditional operator by december
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |