use 5.010; use strict; use warnings; sub f { # ( [$:arg] ) my $arg = do {$_ = shift // q{}; (length) ? $_ : 'default_value'}; $arg; } print f( )."\n"; # prints "default_value" print f( undef )."\n"; # prints "default_value" print f( q{} )."\n"; # prints "default_value" print f( 0 )."\n"; # prints "0" print f( 1 )."\n"; # prints "1" print f( 'value' )."\n"; # prints "value"