#!/usr/bin/perl use v5.16; use warnings; use Benchmark qw/cmpthese/; my $foo = { bar => 'baz', baz => undef, }; my $foo1 = {}; sub _ifdefined { for ( keys(%{$foo}) ) { $foo1->{$_} = 'default' unless defined($foo->{$_}); } } sub _definedor { for ( keys(%{$foo}) ) { $foo1->{$_} //= 'default'; } } cmpthese( -5, { _ifdefined => sub { _ifdefined() }, _definedor => sub { _definedor() }, } ); exit; __END__ Output: Rate _ifdefined _definedor _ifdefined 1081314/s -- -12% _definedor 1228949/s 14% --