Doh! you're absolutely right that my suggestion bails out one element too soon.... However, I don't think your fix changes anything. We need to write the expression so that '0' is TURE but undef and the empty list are FALSE. All of these Deparse the same for me, and all are FALSE-on-0, not TRUE-on-0 as we would like:
# FALSE-on-0 (bad)
% perl -e 'while($x = 0) {sleep print "Hello\n"}'
% perl -e 'while(($x = 0)) {sleep print "Hello\n"}'
% perl -e 'while((($x = 0))) {sleep print "Hello\n"}'
% perl -e 'while(((($x = 0)))) {sleep print "Hello\n"}'
So, your suggestion of adding those parens around the whole while expression doesn't seem to modify context at all.
However, YuckFoo's suggestion will work just fine:
# TRUE-on-0 (good)
% perl -e 'while(($x) = 0 ) {sleep print "Hello\n"}'
# but FALSE-on-() (good)
% perl -e 'while(($x) = () ) {sleep print "Hello\n"}'
Which is exactly what we want.
-Blake
|