in reply to Re^5: Assigning default values to function arguments which may be "empty"
in thread Assigning default values to function arguments which may be “empty”

It's not needed, but changing the context to scalar is:
#!/usr/bin/perl use warnings; use strict; use Syntax::Construct qw( // ); use Benchmark qw{ cmpthese }; use List::Util qw{ first }; use Test::More; sub f0 { my ($arg) = grep length, shift, 'default'; $arg } sub f1 { my $arg = first { defined && length } shift, 'default'; $arg } sub f2 { my $arg = defined $_[0] && length $_[0] ? shift : 'default'; $arg } our @args = ( undef, '', 'fred', 1, 1.5 ) x 1000; for my $arg (@args[ 0 .. 4 ]) { is f0($arg), f1($arg), "f0-f1-" . ($arg // 'undef'); is f0($arg), f2($arg), "f0-f2-" . ($arg // 'undef'); } done_testing(); cmpthese -1, { grep => q[ f0( $_ ) for @args ], first => q[ f1( $_ ) for @args ], simple => q[ f2( $_ ) for @args ], };
ok 1 - f0-f1-undef ok 2 - f0-f2-undef ok 3 - f0-f1- ok 4 - f0-f2- ok 5 - f0-f1-fred ok 6 - f0-f2-fred ok 7 - f0-f1-1 ok 8 - f0-f2-1 ok 9 - f0-f1-1.5 ok 10 - f0-f2-1.5 1..10 Rate first grep simple first 570/s -- -14% -45% grep 661/s 16% -- -36% simple 1036/s 82% 57% --
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Replies are listed 'Best First'.
Re^7: Assigning default values to function arguments which may be "empty"
by Anonymous Monk on Aug 20, 2016 at 01:18 UTC

    Thanks choroba & soonix.