sub foo { ... my $var = "" if ; ... } #### $ cat my_with_if.pl #!/usr/bin/env perl use strict; use warnings; use feature 'say'; use feature 'signatures'; no warnings 'experimental::signatures'; use Data::Dump qw( pp ); sub foo( $value ) { say "foo( ", pp( $value ), " )"; my $result = "default" if not defined $value; say "\$result after 'my' is ", pp( $result ); $result //= $value; say "\$result after '//=' is ", pp( $result ); say ""; return $result; } foo( $_ ) for ( "call 1.1", "call 1.2", "call 1.3", undef, "call 2.1", "call 2.2", "call 2.3", ); 1; $ ./my_with_if.pl foo( "call 1.1" ) $result after 'my' is undef $result after '//=' is "call 1.1" foo( "call 1.2" ) $result after 'my' is "call 1.1" $result after '//=' is "call 1.1" foo( "call 1.3" ) $result after 'my' is "call 1.1" $result after '//=' is "call 1.1" foo( undef ) $result after 'my' is "default" $result after '//=' is "default" foo( "call 2.1" ) $result after 'my' is undef $result after '//=' is "call 2.1" foo( "call 2.2" ) $result after 'my' is "call 2.1" $result after '//=' is "call 2.1" foo( "call 2.3" ) $result after 'my' is "call 2.1" $result after '//=' is "call 2.1" #### my $var = ? "" : undef;