Blame extras/slurp_bench.pl

Packit Service d54d9c
#!/usr/bin/perl
Packit be8974
Packit be8974
use strict ;
Packit be8974
use warnings ;
Packit be8974
Packit be8974
use Getopt::Long ;
Packit be8974
use Benchmark qw( timethese cmpthese ) ;
Packit be8974
use Carp ;
Packit be8974
use FileHandle ;
Packit be8974
use Fcntl qw( :DEFAULT :seek );
Packit be8974
Packit be8974
use File::Slurp () ;
Packit be8974
use FileSlurp_12 () ;
Packit be8974
Packit be8974
my $file_name = 'slurp_data' ;
Packit be8974
my( @lines, $text ) ;
Packit be8974
Packit be8974
my %opts ;
Packit be8974
Packit be8974
parse_options() ;
Packit be8974
Packit be8974
run_benchmarks() ;
Packit be8974
Packit be8974
unlink $file_name ;
Packit be8974
Packit be8974
exit ;
Packit be8974
Packit be8974
sub run_benchmarks {
Packit be8974
Packit be8974
	foreach my $size ( @{$opts{size_list}} ) {
Packit be8974
Packit be8974
		@lines = ( 'a' x 80 . "\n") x ( $size / 81 + 1 ) ;
Packit be8974
		$text = join( '', @lines ) ;
Packit be8974
Packit be8974
		my $overage = length($text) - $size ;
Packit be8974
		substr( $text, -$overage, $overage, '' ) ;
Packit be8974
		substr( $lines[-1], -$overage, $overage, '' ) ;
Packit be8974
Packit be8974
		if ( $opts{slurp} ) {
Packit be8974
Packit be8974
			File::Slurp::write_file( $file_name, $text ) ;
Packit be8974
Packit be8974
			bench_list_slurp( $size ) if $opts{list} ;
Packit be8974
	 		bench_scalar_slurp( $size ) if $opts{scalar} ;
Packit be8974
		}
Packit be8974
Packit be8974
		if ( $opts{spew} ) {
Packit be8974
Packit be8974
			bench_spew_list( $size ) if $opts{list} ;
Packit be8974
	 		bench_scalar_spew( $size ) if $opts{scalar} ;
Packit be8974
		}
Packit be8974
	}
Packit be8974
}
Packit be8974
Packit be8974
##########################################
Packit be8974
##########################################
Packit be8974
sub bench_scalar_slurp {
Packit be8974
Packit be8974
	my ( $size ) = @_ ;
Packit be8974
Packit be8974
	print "\n\nReading (Slurp) into a scalar: Size = $size bytes\n\n" ;
Packit be8974
Packit be8974
	my $buffer ;
Packit be8974
Packit be8974
	my $result = timethese( $opts{iterations}, {
Packit be8974
Packit be8974
		'FS::read_file' =>
Packit be8974
	    		sub { my $text = File::Slurp::read_file( $file_name ) },
Packit be8974
Packit be8974
		'FS12::read_file' =>
Packit be8974
	    		sub { my $text = FileSlurp_12::read_file( $file_name ) },
Packit be8974
Packit be8974
		'FS::read_file_buf_ref' =>
Packit be8974
	    		sub { my $text ;
Packit be8974
			   File::Slurp::read_file( $file_name, buf_ref => \$text ) },
Packit be8974
		'FS::read_file_buf_ref2' =>
Packit be8974
	    		sub { 
Packit be8974
			   File::Slurp::read_file( $file_name, buf_ref => \$buffer ) },
Packit be8974
		'FS::read_file_scalar_ref' =>
Packit be8974
	    		sub { my $text =
Packit be8974
			    File::Slurp::read_file( $file_name, scalar_ref => 1 ) },
Packit be8974
Packit be8974
		old_sysread_file =>
Packit be8974
	    		sub { my $text = old_sysread_file( $file_name ) },
Packit be8974
Packit be8974
		old_read_file =>
Packit be8974
	    		sub { my $text = old_read_file( $file_name ) },
Packit be8974
Packit be8974
		orig_read_file =>
Packit be8974
			sub { my $text = orig_read_file( $file_name ) },
Packit be8974
Packit be8974
		orig_slurp =>
Packit be8974
			sub { my $text = orig_slurp_scalar( $file_name ) },
Packit be8974
Packit be8974
		file_contents =>
Packit be8974
			sub { my $text = file_contents( $file_name ) },
Packit be8974
Packit be8974
		file_contents_no_OO =>
Packit be8974
			sub { my $text = file_contents_no_OO( $file_name ) },
Packit be8974
	} ) ;
Packit be8974
Packit be8974
	cmpthese( $result ) ;
Packit be8974
}
Packit be8974
Packit be8974
##########################################
Packit be8974
Packit be8974
sub bench_list_slurp {
Packit be8974
Packit be8974
	my ( $size ) = @_ ;
Packit be8974
Packit be8974
	print "\n\nReading (Slurp) into a list: Size = $size bytes\n\n" ;
Packit be8974
Packit be8974
	my $result = timethese( $opts{iterations},  {
Packit be8974
Packit be8974
		'FS::read_file' =>
Packit be8974
	    		sub { my @lines = File::Slurp::read_file( $file_name ) },
Packit be8974
Packit be8974
		'FS::read_file_array_ref' =>
Packit be8974
	    		sub { my $lines_ref =
Packit be8974
			     File::Slurp::read_file( $file_name, array_ref => 1 ) },
Packit be8974
Packit be8974
		'FS::read_file_scalar' =>
Packit be8974
	    		sub { my $lines_ref =
Packit be8974
			     [ File::Slurp::read_file( $file_name ) ] },
Packit be8974
Packit be8974
		old_sysread_file =>
Packit be8974
	    		sub { my @lines = old_sysread_file( $file_name ) },
Packit be8974
Packit be8974
		old_read_file =>
Packit be8974
	    		sub { my @lines = old_read_file( $file_name ) },
Packit be8974
Packit be8974
		orig_read_file =>
Packit be8974
			sub { my @lines = orig_read_file( $file_name ) },
Packit be8974
Packit be8974
		orig_slurp_array =>
Packit be8974
			sub { my @lines = orig_slurp_array( $file_name ) },
Packit be8974
Packit be8974
		orig_slurp_array_ref =>
Packit be8974
			sub { my $lines_ref = orig_slurp_array( $file_name ) },
Packit be8974
	} ) ;
Packit be8974
Packit be8974
	cmpthese( $result ) ;
Packit be8974
}
Packit be8974
Packit be8974
######################################
Packit be8974
# uri's old fast slurp
Packit be8974
Packit be8974
sub old_read_file {
Packit be8974
Packit be8974
	my( $file_name ) = shift ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, $file_name ) || carp "can't open $file_name $!" ;
Packit be8974
Packit be8974
	return <FH> if wantarray ;
Packit be8974
Packit be8974
	my $buf ;
Packit be8974
Packit be8974
	read( FH, $buf, -s FH ) ;
Packit be8974
	return $buf ;
Packit be8974
}
Packit be8974
Packit be8974
sub old_sysread_file {
Packit be8974
Packit be8974
	my( $file_name ) = shift ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, $file_name ) || carp "can't open $file_name $!" ;
Packit be8974
Packit be8974
	return <FH> if wantarray ;
Packit be8974
Packit be8974
	my $buf ;
Packit be8974
Packit be8974
	sysread( FH, $buf, -s FH ) ;
Packit be8974
	return $buf ;
Packit be8974
}
Packit be8974
Packit be8974
######################################
Packit be8974
# from File::Slurp.pm on cpan
Packit be8974
Packit be8974
sub orig_read_file
Packit be8974
{
Packit be8974
	my ($file) = @_;
Packit be8974
Packit be8974
	local($/) = wantarray ? $/ : undef;
Packit be8974
	local(*F);
Packit be8974
	my $r;
Packit be8974
	my (@r);
Packit be8974
Packit be8974
	open(F, "<$file") || croak "open $file: $!";
Packit be8974
	@r = <F>;
Packit be8974
	close(F) || croak "close $file: $!";
Packit be8974
Packit be8974
	return $r[0] unless wantarray;
Packit be8974
	return @r;
Packit be8974
}
Packit be8974
Packit be8974
Packit be8974
######################################
Packit be8974
# from Slurp.pm on cpan
Packit be8974
Packit be8974
sub orig_slurp { 
Packit be8974
    local( $/, @ARGV ) = ( wantarray ? $/ : undef, @_ ); 
Packit be8974
    return <ARGV>;
Packit be8974
}
Packit be8974
Packit be8974
sub orig_slurp_array {
Packit be8974
    my @array = orig_slurp( @_ );
Packit be8974
    return wantarray ? @array : \@array;
Packit be8974
}
Packit be8974
Packit be8974
sub orig_slurp_scalar {
Packit be8974
    my $scalar = orig_slurp( @_ );
Packit be8974
    return $scalar;
Packit be8974
}
Packit be8974
Packit be8974
######################################
Packit be8974
# very slow slurp code used by a client
Packit be8974
Packit be8974
sub file_contents {
Packit be8974
    my $file = shift;
Packit be8974
    my $fh = new FileHandle $file or
Packit be8974
        warn("Util::file_contents:Can't open file $file"), return '';
Packit be8974
    return join '', <$fh>;
Packit be8974
}
Packit be8974
Packit be8974
# same code but doesn't use FileHandle.pm
Packit be8974
Packit be8974
sub file_contents_no_OO {
Packit be8974
    my $file = shift;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, $file ) || carp "can't open $file $!" ;
Packit be8974
Packit be8974
    return join '', <FH>;
Packit be8974
}
Packit be8974
Packit be8974
##########################################
Packit be8974
##########################################
Packit be8974
Packit be8974
sub bench_spew_list {
Packit be8974
Packit be8974
	my( $size ) = @_ ;
Packit be8974
Packit be8974
	print "\n\nWriting (Spew) a list of lines: Size = $size bytes\n\n" ;
Packit be8974
Packit be8974
	my $result = timethese( $opts{iterations}, {
Packit be8974
 		'FS::write_file'	=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			File::Slurp::write_file( $file_name, @lines ) },
Packit be8974
 		'FS::write_file Aref'	=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			File::Slurp::write_file( $file_name, \@lines ) },
Packit be8974
		'print'			=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			print_file( $file_name, @lines ) },
Packit be8974
		'print/join'		=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			print_join_file( $file_name, @lines ) },
Packit be8974
		'syswrite/join'		=> sub { unlink $file_name if $opts{unlink} ;
Packit be8974
			syswrite_join_file( $file_name, @lines ) },
Packit be8974
		'original write_file'	=> sub {  unlink $file_name if $opts{unlink} ; 
Packit be8974
			orig_write_file( $file_name, @lines ) },
Packit be8974
	} ) ;
Packit be8974
Packit be8974
	cmpthese( $result ) ;
Packit be8974
}
Packit be8974
Packit be8974
sub print_file {
Packit be8974
Packit be8974
	my( $file_name ) = shift ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, ">$file_name" ) || carp "can't create $file_name $!" ;
Packit be8974
Packit be8974
	print FH @_ ;
Packit be8974
}
Packit be8974
Packit be8974
sub print_join_file {
Packit be8974
Packit be8974
	my( $file_name ) = shift ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, ">$file_name" ) || carp "can't create $file_name $!" ;
Packit be8974
Packit be8974
	print FH join( '', @_ ) ;
Packit be8974
}
Packit be8974
Packit be8974
sub syswrite_join_file {
Packit be8974
Packit be8974
	my( $file_name ) = shift ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, ">$file_name" ) || carp "can't create $file_name $!" ;
Packit be8974
Packit be8974
	syswrite( FH, join( '', @_ ) ) ;
Packit be8974
}
Packit be8974
Packit be8974
sub sysopen_syswrite_join_file {
Packit be8974
Packit be8974
	my( $file_name ) = shift ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	sysopen( FH, $file_name, O_WRONLY | O_CREAT ) ||
Packit be8974
				carp "can't create $file_name $!" ;
Packit be8974
Packit be8974
	syswrite( FH, join( '', @_ ) ) ;
Packit be8974
}
Packit be8974
Packit be8974
sub orig_write_file
Packit be8974
{
Packit be8974
	my ($f, @data) = @_;
Packit be8974
Packit be8974
	local(*F);
Packit be8974
Packit be8974
	open(F, ">$f") || croak "open >$f: $!";
Packit be8974
	(print F @data) || croak "write $f: $!";
Packit be8974
	close(F) || croak "close $f: $!";
Packit be8974
	return 1;
Packit be8974
}
Packit be8974
Packit be8974
##########################################
Packit be8974
Packit be8974
sub bench_scalar_spew {
Packit be8974
Packit be8974
	my ( $size ) = @_ ;
Packit be8974
Packit be8974
	print "\n\nWriting (Spew) a scalar: Size = $size bytes\n\n" ;
Packit be8974
Packit be8974
	my $result = timethese( $opts{iterations}, {
Packit be8974
		'FS::write_file'	=> sub { unlink $file_name if $opts{unlink} ;
Packit be8974
			File::Slurp::write_file( $file_name, $text ) },
Packit be8974
		'FS::write_file Sref'	=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			File::Slurp::write_file( $file_name, \$text ) },
Packit be8974
		'print'			=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			print_file( $file_name, $text ) },
Packit be8974
		'syswrite_file'		=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			syswrite_file( $file_name, $text ) },
Packit be8974
		'syswrite_file_ref'	=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			syswrite_file_ref( $file_name, \$text ) },
Packit be8974
		'orig_write_file'	=> sub { unlink $file_name if $opts{unlink} ; 
Packit be8974
			orig_write_file( $file_name, $text ) },
Packit be8974
	} ) ;
Packit be8974
Packit be8974
	cmpthese( $result ) ;
Packit be8974
}
Packit be8974
Packit be8974
sub syswrite_file {
Packit be8974
Packit be8974
	my( $file_name, $text ) = @_ ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, ">$file_name" ) || carp "can't create $file_name $!" ;
Packit be8974
Packit be8974
	syswrite( FH, $text ) ;
Packit be8974
}
Packit be8974
Packit be8974
sub syswrite_file_ref {
Packit be8974
Packit be8974
	my( $file_name, $text_ref ) = @_ ;
Packit be8974
Packit be8974
	local( *FH ) ;
Packit be8974
	open( FH, ">$file_name" ) || carp "can't create $file_name $!" ;
Packit be8974
Packit be8974
	syswrite( FH, ${$text_ref} ) ;
Packit be8974
}
Packit be8974
Packit be8974
sub parse_options {
Packit be8974
Packit be8974
	my $result = GetOptions (\%opts, qw(
Packit be8974
		iterations|i=s
Packit be8974
		direction|d=s
Packit be8974
		context|c=s
Packit be8974
		sizes|s=s
Packit be8974
		unlink|u
Packit be8974
		legend|key|l|k
Packit be8974
		help|usage
Packit be8974
	) ) ;
Packit be8974
Packit be8974
	usage() unless $result ;
Packit be8974
Packit be8974
	usage() if $opts{help} ;
Packit be8974
Packit be8974
	legend() if $opts{legend} ;
Packit be8974
Packit be8974
# set defaults
Packit be8974
Packit be8974
	$opts{direction} ||= 'both' ;
Packit be8974
	$opts{context} ||= 'both' ;
Packit be8974
	$opts{iterations} ||= -2 ;
Packit be8974
	$opts{sizes} ||= '512,10k,1m' ;
Packit be8974
Packit be8974
	if ( $opts{direction} eq 'both' ) {
Packit be8974
	
Packit be8974
		$opts{spew} = 1 ;
Packit be8974
		$opts{slurp} = 1 ;
Packit be8974
	}
Packit be8974
	elsif ( $opts{direction} eq 'in' ) {
Packit be8974
Packit be8974
		$opts{slurp} = 1 ;
Packit be8974
	
Packit be8974
	}
Packit be8974
	elsif ( $opts{direction} eq 'out' ) {
Packit be8974
Packit be8974
		$opts{spew} = 1 ;
Packit be8974
	}
Packit be8974
	else {
Packit be8974
Packit be8974
		usage( "Unknown direction: $opts{direction}" ) ;
Packit be8974
	}
Packit be8974
Packit be8974
	if ( $opts{context} eq 'both' ) {
Packit be8974
	
Packit be8974
		$opts{list} = 1 ;
Packit be8974
		$opts{scalar} = 1 ;
Packit be8974
	}
Packit be8974
	elsif ( $opts{context} eq 'scalar' ) {
Packit be8974
Packit be8974
		$opts{scalar} = 1 ;
Packit be8974
	
Packit be8974
	}
Packit be8974
	elsif ( $opts{context} eq 'list' ) {
Packit be8974
Packit be8974
		$opts{list} = 1 ;
Packit be8974
	}
Packit be8974
	else {
Packit be8974
Packit be8974
		usage( "Unknown context: $opts{context}" ) ;
Packit be8974
	}
Packit be8974
Packit be8974
	if ( $opts{context} eq 'both' ) {
Packit be8974
	
Packit be8974
		$opts{list} = 1 ;
Packit be8974
		$opts{scalar} = 1 ;
Packit be8974
	}
Packit be8974
	elsif ( $opts{context} eq 'scalar' ) {
Packit be8974
Packit be8974
		$opts{scalar} = 1 ;
Packit be8974
	
Packit be8974
	}
Packit be8974
	elsif ( $opts{context} eq 'list' ) {
Packit be8974
Packit be8974
		$opts{list} = 1 ;
Packit be8974
	}
Packit be8974
	else {
Packit be8974
Packit be8974
		usage( "Unknown context: $opts{context}" ) ;
Packit be8974
	}
Packit be8974
Packit be8974
	foreach my $size ( split ',', ( $opts{sizes} ) ) {
Packit be8974
Packit be8974
Packit be8974
# check for valid size and suffix. grab both.
Packit be8974
Packit be8974
		usage( "Illegal size: $size") unless $size =~ /^(\d+)([km])?$/ ;
Packit be8974
Packit be8974
# handle suffix multipliers
Packit be8974
Packit be8974
		$size =  $1 * (( $2 eq 'k' ) ? 1024 : 1024*1024) if $2 ;
Packit be8974
Packit be8974
		push( @{$opts{size_list}}, $size ) ;
Packit be8974
	}
Packit be8974
Packit be8974
#use Data::Dumper ;
Packit be8974
#print Dumper \%opts ;
Packit be8974
}
Packit be8974
Packit be8974
sub legend {
Packit be8974
Packit be8974
	die <<'LEGEND' ;
Packit be8974
--------------------------------------------------------------------------
Packit be8974
Legend for the Slurp Benchmark Entries
Packit be8974
Packit be8974
In all cases below 'FS' or 'F::S' means the current File::Slurp module
Packit be8974
is being used in the benchmark. The full name and description will say
Packit be8974
which options are being used.
Packit be8974
--------------------------------------------------------------------------
Packit be8974
These benchmarks write a list of lines to a file. Use the direction option
Packit be8974
of 'out' or 'both' and the context option is 'list' or 'both'.
Packit be8974
Packit be8974
	Key			Description/Source
Packit be8974
	-----			--------------------------
Packit be8974
	FS::write_file		Current F::S write_file
Packit be8974
	FS::write_file Aref	Current F::S write_file on array ref of data
Packit be8974
	print			Open a file and call print() on the list data
Packit be8974
	print/join		Open a file and call print() on the joined list
Packit be8974
				data
Packit be8974
	syswrite/join		Open a file, call syswrite on joined list data
Packit be8974
	sysopen/syswrite	Sysopen a file, call syswrite on joined list
Packit be8974
				data
Packit be8974
	original write_file	write_file code from original File::Slurp
Packit be8974
				(pre-version 9999.*)
Packit be8974
--------------------------------------------------------------------------
Packit be8974
These benchmarks write a scalar to a file. Use the direction option
Packit be8974
of 'out' or 'both' and the context option is 'scalar' or 'both'.
Packit be8974
Packit be8974
	Key			Description/Source
Packit be8974
	-----			--------------------------
Packit be8974
	FS::write_file		Current F::S write_file
Packit be8974
	FS::write_file Sref	Current F::S write_file of scalar ref of data
Packit be8974
	print			Open a file and call print() on the scalar data
Packit be8974
	syswrite_file		Open a file, call syswrite on scalar data
Packit be8974
	syswrite_file_ref	Open a file, call syswrite on scalar ref of
Packit be8974
				data
Packit be8974
	orig_write_file		write_file code from original File::Slurp
Packit be8974
				(pre-version 9999.*)
Packit be8974
--------------------------------------------------------------------------
Packit be8974
These benchmarks slurp a file into an array. Use the direction option
Packit be8974
of 'in' or 'both' and the context option is 'list' or 'both'.
Packit be8974
Packit be8974
	Key				Description/Source
Packit be8974
	-----				--------------------------
Packit be8974
	FS::read_file			Current F::S read_file - returns array
Packit be8974
	FS::read_file_array_ref		Current F::S read_file - returns array
Packit be8974
					ref in any context
Packit be8974
	FS::read_file_scalar		Current F::S read_file - returns array
Packit be8974
					ref in scalar context
Packit be8974
	old_sysread_file		My old fast slurp - calls sysread
Packit be8974
	old_read_file			My old fast slurp - calls read
Packit be8974
	orig_read_file			Original File::Slurp on CPAN 
Packit be8974
	orig_slurp_array		Slurp.pm on CPAN - returns array
Packit be8974
	orig_slurp_array_ref		Slurp.pm on CPAN - returns array ref
Packit be8974
--------------------------------------------------------------------------
Packit be8974
These benchmarks slurp a file into a scalar. Use the direction option
Packit be8974
of 'in' or 'both' and the context option is 'scalar' or 'both'.
Packit be8974
Packit be8974
	Key				Description/Source
Packit be8974
	-----				--------------------------
Packit be8974
	FS::read_file			Current F::S read_file - returns scalar
Packit be8974
	FS12::read_file			F::S .12 slower read_file -
Packit be8974
					returns scalar
Packit be8974
	FS::read_file_buf_ref		Current F::S read_file - returns
Packit be8974
					via buf_ref argument - new buffer
Packit be8974
	FS::read_file_buf_ref2		Current F::S read_file - returns
Packit be8974
					via buf_ref argument - uses
Packit be8974
					existing buffer
Packit be8974
	FS::read_file_scalar_ref	Current F::S read_file - returns a 
Packit be8974
					scalar ref
Packit be8974
	old_sysread_file		My old fast slurp - calls sysread
Packit be8974
	old_read_file			My old fast slurp - calls read
Packit be8974
	orig_read_file			Original File::Slurp on CPAN 
Packit be8974
	orig_slurp			Slurp.pm on CPAN
Packit be8974
	file_contents			Very slow slurp code done by a client
Packit be8974
	file_contents_no_OO		Same code but doesn't use FileHandle.pm 
Packit be8974
--------------------------------------------------------------------------
Packit be8974
LEGEND
Packit be8974
}
Packit be8974
Packit be8974
sub usage {
Packit be8974
Packit be8974
	my( $err ) = @_ ;
Packit be8974
Packit be8974
	$err ||= '' ;
Packit be8974
Packit be8974
	die <
Packit be8974
$err
Packit be8974
Usage: $0 [--iterations=<iter>] [--direction=<dir>] [--context=<con>] 
Packit be8974
          [--sizes=<size_list>] [--legend] [--help]
Packit be8974
Packit be8974
	--iterations=<iter>	Run the benchmarks this many iterations
Packit be8974
	-i=<iter>		A positive number is iteration count,
Packit be8974
				a negative number is minimum CPU time in
Packit be8974
				seconds. Default is -2 (run for 2 CPU seconds).
Packit be8974
Packit be8974
	--direction=<dir>	Which direction to slurp: 'in', 'out' or 'both'.
Packit be8974
	-d=<dir>		Default is 'both'.
Packit be8974
Packit be8974
	--context=<con>		Which context is used for slurping: 'list',
Packit be8974
	-c=<con>		'scalar' or 'both'. Default is 'both'.
Packit be8974
Packit be8974
	--sizes=<size_list>	What sizes will be used in slurping (either
Packit be8974
	-s=<size_list>		direction). This is a comma separated list of
Packit be8974
				integers. You can use 'k' or 'm' as suffixes
Packit be8974
				for 1024 and 1024**2. Default is '512,10k,1m'.
Packit be8974
Packit be8974
	--unlink		Unlink the written file before each time
Packit be8974
	-u			a file is written
Packit be8974
Packit be8974
	--legend		Print out a legend of all the benchmark entries.
Packit be8974
	--key
Packit be8974
	-l
Packit be8974
	-k
Packit be8974
Packit be8974
	--help			Print this help text
Packit be8974
	--usage
Packit be8974
DIE
Packit be8974
Packit be8974
}
Packit be8974
Packit be8974
__END__
Packit be8974