use strict; use warnings; use Benchmark qw(cmpthese); my $line = join (',', 1 .. 1000) . "\n"; my $data = $line x 100; cmpthese ( -1, { array => \&asArray, str => \&asStr, } ); sub asArray { my $outStr; open my $in, '<', \$data; open my $out, '>', \$outStr; print $out join ',', map {s/$/a/; $_} split ',' while <$in>; return $outStr; } sub asStr { my $outStr; open my $in, '<', \$data; open my $out, '>', \$outStr; while (<$in>) { s/(?=,)|\n/a/g if /\S/; print $out $_; } return $outStr; }