#! perl -slw use strict; use vars qw[@a @b @c @d]; use Benchmark 'cmpthese'; our @a=1..10; our @b=5..15; our @c=10..20; our @d=15..25; our (@A, @B, @C); my $ari = '@A = keys %{{ map +($_ => undef), @a, @b, @c, @d }};'; my $buk = '@B = do{local %h; ++@h{@a,@b,@c,@d}; keys %h};'; my $buk2= '@C = do{ my %h; ++@h{@a,@b,@c,@d}; keys %h};'; cmpthese( -1, { ari=>$ari, buk=>$buk, buk2=>$buk2 }); print "@A\n@B\n@C"; __END__ C:\test>junk Benchmark: running ari, buk, buk2, each for at least 1 CPU seconds ... ari: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 1252.80/s (n=1343) buk: 1 wallclock secs ( 1.16 usr + 0.00 sys = 1.16 CPU) @ 2312.39/s (n=2687) buk2: 1 wallclock secs ( 1.09 usr + 0.00 sys = 1.09 CPU) @ 2462.88/s (n=2687) Rate ari buk buk2 ari 1253/s -- -46% -49% buk 2312/s 85% -- -6% buk2 2463/s 97% 7% -- 1 2 3 4 10 5 11 20 6 12 21 7 13 22 8 14 23 9 15 24 16 25 17 18 19 1 2 3 4 10 5 11 20 6 12 21 7 13 22 8 14 23 9 15 24 16 25 17 18 19 1 2 3 10 4 11 5 20 12 6 21 13 7 22 14 8 23 15 9 24 16 25 17 18 19 C:\test>perl58 junk.pl Rate ari buk buk2 ari 744/s -- -41% -43% buk 1265/s 70% -- -3% buk2 1307/s 76% 3% -- 11 21 7 17 2 22 1 18 23 16 13 25 6 3 9 12 20 14 15 8 4 24 19 10 5 11 21 7 17 2 22 1 18 23 16 13 25 6 3 9 12 20 14 15 8 4 24 19 10 5 11 21 7 17 2 22 1 18 23 16 13 25 6 3 9 12 20 15 14 8 4 24 19 10 5