my $my_var = "default"
unless defined $param;
$my_var //= $param;
####
#!/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( $param ) {
say "\$param is ", pp( $param );
my $my_var = "default"
unless defined $param;
say "\$my_var after declaration is ", pp( $my_var );
say +( defined $param
? ! defined $my_var
: defined $my_var && $my_var eq 'default' )
? " (as expected)"
: " (unexpected to me!)";
$my_var //= $param;
say "\$my_var after '//=' is ", pp( $my_var );
say "";
return $my_var;
}
foo( $_ )
for undef, "call 1", "call 2", "call 3";
1;
####
$ ./my_with_if.pl
$param is undef
$my_var after declaration is "default"
(as expected)
$my_var after '//=' is "default"
$param is "call 1"
$my_var after declaration is undef
(as expected)
$my_var after '//=' is "call 1"
$param is "call 2"
$my_var after declaration is "call 1"
(unexpected to me!)
$my_var after '//=' is "call 1"
$param is "call 3"
$my_var after declaration is "call 1"
(unexpected to me!)
$my_var after '//=' is "call 1"