use strict; use warnings; use Benchmark qw(cmpthese); use File::Slurp; my $TESTFILE = "foo"; die "'$TESTFILE' exists" if -e $TESTFILE; sub slurp { local (@ARGV, $/) = $_[0]; <> } for my $size (500, 5_000, 50_000, 500_000, 5_000_000, 25_000_000) { print "--- Test size: $size\n"; open my $out, ">", $TESTFILE; print $out "x"x$size; close $out; cmpthese(-2, { fs_sub => sub { my $x = read_file $TESTFILE }, is_sub => sub { my $x = slurp $TESTFILE }, is_nosub => sub { my $x = do { local (@ARGV, $/) = $TESTFILE; <> }; }, }); unlink $TESTFILE; }