#!perl
use strict;
use warnings;
use Benchmark qw(cmpthese timethese);
use PerlIO::Util;
printf "Perl/%vd PerlIO::Util/%s\n\n",
$^V, $PerlIO::Util::VERSION;
my $file = @ARGV ? shift(@ARGV) : `perldoc -l perl`;
$file =~ s/\s+$//;
{
my $in = PerlIO::Util->open('<', $file);
local $/;
my $content = <$in>;
print "file: ", $file, "\n";
print "line: ", $content =~ tr/\n/\n/, "\n";
print "size: ", int(length($content) / 1024), " KB\n";
}
cmpthese timethese -1 => {
':reverse' => sub{
open my $in, '<:reverse', $file or die $!;
while(<$in>){
#...;
}
},
'reverse readline' => sub{
open my $in, '<:perlio', $file or die $!;
foreach (reverse <$in>){
# ...
}
},
'readline' => sub{
open my $in, '<:perlio', $file or die $!;
while(<$in>){
# ...
}
},
};