use Benchmark 'cmpthese'; sub gr { # Guttman-Rosler transform map { substr( $_, 3 ) } sort map { sprintf( '%03d', /abc(\d+)xyz/ ) . $_ } @_; } srand 0; my @u = map 'abc' . int( rand 1000 ) . 'xyz', 1..500; cmpthese( -1, { s_aa => sub { my @s = sort @u }, s_fi => sub { ( sort @u )[ 0 ] }, s_na => sub { () = sort @u } } ); cmpthese( -1, { g_aa => sub { my @s = gr @u }, g_fi => sub { ( gr @u )[ 0 ] }, g_na => sub { () = gr @u } } ); #### Rate s_aa s_na s_fi s_aa 1037/s -- -49% -49% s_na 2017/s 95% -- -1% s_fi 2036/s 96% 1% -- Rate g_na g_aa g_fi g_na 237/s -- 0% -14% g_aa 237/s 0% -- -14% g_fi 275/s 16% 16% --