use strict; use Benchmark; my $a_huge_value = 10000000; sub outside { my($foo); for (my $i = 0; $i < $a_huge_value; $i++) { $foo = $i + 1; $foo++; } } sub inside { for (my $i = 0; $i < $a_huge_value; $i++) { my $foo = $i + 1; $foo++; } } timethese 1, { inside => \&inside, outside => \&outside, }; __END__ Benchmark: timing 1 iterations of inside, outside... inside: 6 wallclock secs ( 5.99 usr + 0.00 sys = 5.99 CPU) @ 0.17/s (n=1) outside: 5 wallclock secs ( 4.95 usr + 0.01 sys = 4.96 CPU) @ 0.20/s (n=1) #### Benchmark: timing 1 iterations of inside, outside... inside: 12 wallclock secs (10.95 usr + 0.00 sys = 10.95 CPU) @ 0.09/s (n=1) outside: 10 wallclock secs ( 9.49 usr + 0.02 sys = 9.51 CPU) @ 0.11/s (n=1) #### sub inInit { for (my ($i, $foo) = (0, 0); $i < $a_huge_value; $i++) { $foo = $i + 1; $foo++; } } #### for ($i = 0; $i < $a_whole_lot; $i++) { ($key, $value) = returnsAnArray(); }