# perl -MO=Concise -e 'grep {defined} @array' a <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 2 -e:1) v ->3 7 <|> grepwhile(other->8)[t2] vK/1 ->a 6 <@> grepstart K*/2 ->7 3 <0> pushmark s ->4 - <1> null lK/1 ->4 - <1> null sK/1 ->7 - <@> scope sK ->7 - <0> ex-nextstate v ->8 9 <1> defined sK/1 ->- - <1> ex-rv2sv sK*/1 ->9 8 <$> gvsv(*_) s ->9 5 <1> rv2av[t1] lKM/1 ->6 4 <$> gv(*array) s ->5 # perl -MO=Concise -e 'grep defined, @array' a <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 7 <|> grepwhile(other->8)[t2] vK/1 ->a 6 <@> grepstart K/2 ->7 3 <0> pushmark s ->4 - <1> null lK/1 ->4 9 <1> defined sK/1 ->7 - <1> ex-rv2sv sK*/1 ->9 8 <$> gvsv(*_) s ->9 5 <1> rv2av[t1] lKM/1 ->6 4 <$> gv(*array) s ->5 #### Rate short_block_ne short_bare_ne short_bare_len short_block_len short_block_ne 3008231/s -- -0% -10% -20% short_bare_ne 3014515/s 0% -- -10% -20% short_bare_len 3342828/s 11% 11% -- -12% short_block_len 3783871/s 26% 26% 13% -- Rate none_bare_len none_block_len none_bare_ne none_block_ne none_bare_len 3390307/s -- -9% -11% -13% none_block_len 3708523/s 9% -- -3% -5% none_bare_ne 3807187/s 12% 3% -- -2% none_block_ne 3885959/s 15% 5% 2% -- Rate long_bare_ne long_block_len long_block_ne long_bare_len long_bare_ne 3635361/s -- -6% -6% -8% long_block_len 3869054/s 6% -- -0% -2% long_block_ne 3872708/s 7% 0% -- -2% long_bare_len 3963159/s 9% 2% 2% -- #### #! /usr/bin/perl -w use strict; use Benchmark 'cmpthese'; my @none = ('a' .. 'm' ); my @short = ('a', ''); my @long = ('a' .. 'z', ''); my $iter = shift || -1; print "block_ne : [$_]\n" for grep {$_ ne ''} @short; print "block_len: [$_]\n" for grep {length} @short; print "bare_ne : [$_]\n" for grep $_ ne '', @short; print "bare_len : [$_]\n" for grep length, @short; cmpthese( $iter, { short_block_ne => q{grep {$_ ne ''} @short}, short_block_len => q{grep {length} @short}, short_bare_ne => q{grep $_ ne '', @short}, short_bare_len => q{grep length, @short}, } ); cmpthese( $iter, { none_block_ne => q{grep {$_ ne ''} @none}, none_block_len => q{grep {length} @none}, none_bare_ne => q{grep $_ ne '', @none}, none_bare_len => q{grep length, @none}, } ); cmpthese( $iter,{ long_block_ne => q{grep {$_ ne ''} @long}, long_block_len => q{grep {length} @long}, long_bare_ne => q{grep $_ ne '', @long}, long_bare_len => q{grep length, @long}, } );