# if EXPR is false $foo will still have the last set value for this scope's (but not other scope's) $foo my $foo if EXPR; #same here if EXPR is false the first time it's tested on this pass. my $bar while EXPR; #### while (my $foo = <$fh>) { #do something } while (my ($key, $value) = each %hash) { #do other things }