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