#!/usr/bin/perl -w use strict; use Benchmark; my $lastCase; timethese( 50000,{ switch => sub { sub switch{ eval{ goto "case_$_[0]" } or goto default; # goto 'case_'.$_[0]; # goto case_1; # goto case_20; } for my $expr ( 1 .. 10, 'fred' ) { switch( $expr ); # switch: goto 'case_'.$expr; # switch: goto case_1; # switch: goto case_20; # switch($expr); # switch: eval{ goto "case_$expr" } or goto default; { case_1: $lastCase = '1'; last; case_2: $lastCase = '2'; last; case_3: $lastCase = '3'; last; case_4: $lastCase = '4'; last; case_5: $lastCase = '5'; last; case_6: $lastCase = '6'; last; case_7: $lastCase = '7'; last; case_8: $lastCase = '8'; last; case_9: $lastCase = '9'; last; case_10: $lastCase = '10'; last; case_11: $lastCase = '11'; last; case_12: $lastCase = '12'; last; case_13: $lastCase = '13'; last; case_14: $lastCase = '14'; last; case_15: $lastCase = '15'; last; case_16: $lastCase = '16'; last; case_17: $lastCase = '17'; last; case_18: $lastCase = '18'; last; case_19: $lastCase = '19'; last; case_20: $lastCase = '20'; last; case_fred: $lastCase = 'fred'; last; default: $lastCase = "default"; } } }, if => sub { for my $expr ( 1 .. 10, 'fred' ) { if ($expr eq '1') {$lastCase = '1'} elsif ($expr eq '2') {$lastCase = '2'} elsif ($expr eq '3') {$lastCase = '3'} elsif ($expr eq '4') {$lastCase = '4'} elsif ($expr eq '5') {$lastCase = '5'} elsif ($expr eq '6') {$lastCase = '6'} elsif ($expr eq '7') {$lastCase = '7'} elsif ($expr eq '8') {$lastCase = '8'} elsif ($expr eq '9') {$lastCase = '9'} elsif ($expr eq '10') {$lastCase = '10'} elsif ($expr eq '11') {$lastCase = '11'} elsif ($expr eq '12') {$lastCase = '12'} elsif ($expr eq '13') {$lastCase = '13'} elsif ($expr eq '14') {$lastCase = '14'} elsif ($expr eq '15') {$lastCase = '15'} elsif ($expr eq '16') {$lastCase = '16'} elsif ($expr eq '17') {$lastCase = '17'} elsif ($expr eq '18') {$lastCase = '18'} elsif ($expr eq '19') {$lastCase = '19'} elsif ($expr eq '20') {$lastCase = '20'} elsif ($expr eq 'fred') {$lastCase = 'fred'} else {$lastCase = "default"} } }, } );