#!/usr/bin/perl use strict; use warnings; use Benchmark ':all'; use English '-no-match-vars'; use IO::Handle; my $long_string = '.' x 200; sub get_long_string { return $long_string; } sub concatenation { my $output = q{}; $output .= get_long_string() for ( 1 .. 1000 ); return $output; } sub filehandle { my $output = q{}; open my $fh, '>', \$output or die "Huh?! $OS_ERROR"; print $fh get_long_string() for ( 1 .. 1000 ); close $fh; return $output; } sub filehandle_OO { my $output = q{}; open my $fh, '>', \$output or die "Huh?! $OS_ERROR"; $fh->print( get_long_string() ) for ( 1 .. 1000 ); $fh->close(); return $output; } sub pushing { my @output; push @output, get_long_string() for ( 1 .. 1000 ); return join( '', @output ); } cmpthese( 10_000, { 'concatenation' => \&concatenation, 'filehandle' => \&filehandle, 'filehandle_OO' => \&filehandle_OO, 'pushing' => \&pushing } );