I didn't know that about the changes to qw//.
I've had some rude surprises when I've written subs that were intended to return lists. That's why I always use an intermediate variable or an explicit wantarray call in when I write a sub that will normally return a list. Things like return 7..5 can have surprising effects in scalar context.
Most of the time, a sub that returns a list should act like an array in scalar context, assigning to an intermediate array is a simple way to get context aware results. When other behavior is desired, I prefer to explicitly construct the result set using wantarray.
sub seven_in_scalar_context {
my @r = 3..9;
return @r;
}
sub nine_in_scalar_context {
my @r = 3..9;
return wantarray ? @r : $r[-1];
}
Array behavior in scalar context is pretty well known, so I feel good about using it implicitly. I've seen too many questions about other kinds of contextual returns (especially the regarding the comma) to feel good about using them implicitly. So I use wantarray everywhere else.
|