use Benchmark qw(:all);
use File::Slurp;
$file_slurp = sub { $file = read_file('arq.pdf', binmode => ':raw') };
$read = sub { open $file, '<', 'arq.pdf' || die $!; read $file, $data, -s 'arq.pdf'; close $file; };
timethese(1000, { file_slurp => $file_slurp, read => $read, });
cmpthese(1000, { file_slurp => $file_slurp, read => $read, });
####
Benchmark: timing 1000 iterations of file_slurp, read...
file_slurp: 1 wallclock secs ( 0.43 usr + 0.31 sys = 0.74 CPU) @ 1351.35/s (n=1000)
read: 6 wallclock secs ( 4.88 usr + 0.44 sys = 5.32 CPU) @ 187.97/s (n=1000)
Rate read file_slurp
read 192/s -- -86%
file_slurp 1333/s 595% --
####
file_slurp: 44 wallclock secs (15.99 usr + 26.40 sys = 42.39 CPU) @ 23.59/s (n=1000)
read: 23 wallclock secs ( 9.12 usr + 13.67 sys = 22.79 CPU) @ 43.88/s (n=1000)
Rate file_slurp read
file_slurp 23.6/s -- -46%
read 43.6/s 85% --
####
file_slurp: 46 wallclock secs (16.01 usr + 26.25 sys = 42.26 CPU) @ 23.66/s (n=1000)
read: 25 wallclock secs ( 9.00 usr + 13.91 sys = 22.91 CPU) @ 43.65/s (n=1000)
Rate file_slurp read
file_slurp 23.7/s -- -46%
read 43.5/s 84% --