my @size=(100,1000,10000,100000); foreach(@size){ my $size=$_; print "size=$size\n"; my $now = 8; my %url = ( monday => { @{[map(($_,1), (1..$size))]} } ); timethese(0, { Grep => q{ $now = (sort grep {$_ <= $now} keys %{$url{'monday'}})[-1]; }, Ternary => q{ $now = ($now < $_ && $_ < 8 ? $_ : $now) for keys %{$url{'monday'}}; }, Max => q{ foreach ( keys %{$url{'monday'}} ) { $now = $_ if $_ > $now }; } }); }