my ($price, $floor) = &get_price_floor() || 0; #### return (10, 8); #### my ($price, $floor); ## needs to be declared in a separate statement ($price, $floor) = &get_price_floor() or ($price, $floor) = (0, 0); #### sub good { return (10, 8); } sub bad { return (); } my ($price, $floor); ($price, $floor) = good() or ($price, $floor) = (0, 0); print "good: price=$price, floor=$floor\n"; ($price, $floor) = bad() or ($price, $floor) = (0, 0); print "bad: price=$price, floor=$floor\n"; #### good: price=10, floor=8 bad: price=0, floor=0