use Benchmark; my @arr=(0..10000); open(FH1, '>file1') or die "file1: $!"; open(FH2, '>file2') or die "file2: $!"; open(FH3, '>file3') or die "file3: $!"; timethese(100, { BIGJOIN=>\&bigjoin, ITERATE=>\&iterate, MAPIT=>\&mapit, }); close FH1; close FH2; close FH3; sub bigjoin { print FH1 join("\n", @arr, ''); } sub iterate { print FH2 "$_\n" for @arr; } sub mapit { print FH3 map "$_\n" @arr; } >perl tst Benchmark: timing 100 iterations of BIGJOIN, ITERATE, MAPIT... BIGJOIN: 3 wallclock secs ( 3.41 usr + 0.00 sys = 3.41 CPU) @ 29.33/s (n=100) ITERATE: 14 wallclock secs (13.57 usr + 0.00 sys = 13.57 CPU) @ 7.37/s (n=100) MAPIT: 17 wallclock secs (16.86 usr + 0.00 sys = 16.86 CPU) @ 5.93/s (n=100)