#!/usr/bin/perl -w use strict; use Benchmark; timethese( 1000, { '0while' => sub { $_ = 0; while (1) { $_++; last if ($_ == 10000); } }, '0for' => sub { $_ = 0; for (;;) { $_++; last if ($_ == 10000); } }, '0redo1' => sub { $_ = 0; { $_++; redo if ($_ < 10000); } }, '0redo2' => sub { $_ = 0; { $_++; redo unless ($_ == 10000); } }, '0redo3' => sub { $_ = 0; { $_++; last if ($_ == 10000); redo; } }, '1while' => sub { $_ = 0; while (1) { $_++; last if ($_ == 10000); } }, '1for' => sub { $_ = 0; for (;;) { $_++; last if ($_ == 10000); } }, '1redo1' => sub { $_ = 0; { $_++; redo if ($_ < 10000); } }, '1redo2' => sub { $_ = 0; { $_++; redo unless ($_ == 10000); } }, '1redo3' => sub { $_ = 0; { $_++; last if ($_ == 10000); redo; } }, }); __END__ Benchmark: timing 1000 iterations of 0for, 0redo1, 0redo2, 0redo3, 0while, 1for, 1redo1, 1redo2, 1redo3, 1while... 0for: 14 wallclock secs (11.43 usr + 0.00 sys = 11.43 CPU) 0redo1: 14 wallclock secs (11.62 usr + 0.00 sys = 11.62 CPU) 0redo2: 15 wallclock secs (12.68 usr + 0.00 sys = 12.68 CPU) 0redo3: 15 wallclock secs (12.36 usr + 0.00 sys = 12.36 CPU) 0while: 14 wallclock secs (11.48 usr + 0.00 sys = 11.48 CPU) 1for: 13 wallclock secs (11.40 usr + 0.00 sys = 11.40 CPU) 1redo1: 14 wallclock secs (11.63 usr + 0.00 sys = 11.63 CPU) 1redo2: 14 wallclock secs (11.54 usr + 0.00 sys = 11.54 CPU) 1redo3: 15 wallclock secs (12.36 usr + 0.01 sys = 12.37 CPU) 1while: 14 wallclock secs (11.42 usr + 0.00 sys = 11.42 CPU)