in reply to In What basis the subroutine return values assign to variables ?
is parsed asmy ($price, $floor) = get_price_floor() || 0; sub get_price_floor { return (10, 8); }
which means that get_price_floor() is called in scalar context. Consequently, the return statement happens in scalar context which means that (10, 8) evaluates to 8 (the scalar comma operator). That is assigned to $price while $floor comes out undefined.my ($price, $floor) = (get_price_floor() || 0);
Since you have defined get_price_floor() yourself, it isn't quite clear why you want to prepare for the case it doesn't return anything -- you *know* what it returns. If you have to do that, one way would be the not particularly attractive
Also note I have removed the ampersand from the calls to get_price_floor(). It isn't necessary and, in fact, has side effects you normally don't want.my ($price, $floor); (($price, $floor) = get_price_floor()) || (($price, $floor) = ( 0, 0));
Anno
|
|---|