#!/usr/bin/perl use strict; use warnings; use Benchmark qw(cmpthese timethese); sub tp_map { my $i; my $pos = tell DATA; while () { chomp; chop; s/\?'/'/g; $i = 0; map { '['.$i++."]$_\n" } split(/\+/); } seek DATA, $pos, 0; } sub tp_for { my $i; my $pos = tell DATA; while () { chomp; chop; s/\?'/'/g; $i = 0; '['.$i++."]$_\n" for split(/\+/); } seek DATA, $pos, 0; } cmpthese timethese(-2, { tp_map => \&tp_map, tp_for => \&tp_for, }); __DATA__ 0010+2+O?'Reilly' 012+90+Penguin' #### Benchmark: running tp_for, tp_map for at least 2 CPU seconds... tp_for: 2 wallclock secs ( 1.92 usr + 0.18 sys = 2.10 CPU) @ 48185.71/s (n=101190) tp_map: 2 wallclock secs ( 1.90 usr + 0.17 sys = 2.07 CPU) @ 52882.61/s (n=109467) Rate tp_for tp_map tp_for 48186/s -- -9% tp_map 52883/s 10% --