#!/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;