|
Packit |
a89ea5 |
#!/usr/local/bin/perl -w
|
|
Packit |
a89ea5 |
|
|
Packit |
a89ea5 |
# Simple benchmark of temporary file creation (no filename just a handle)
|
|
Packit |
a89ea5 |
# Uses the following:
|
|
Packit |
a89ea5 |
# - temporary file creation created by IO::File
|
|
Packit |
a89ea5 |
# - temporary file creation using File::Temp (uses security checking)
|
|
Packit |
a89ea5 |
# - A roll-our-own wrapper on top of POSIX::tempnam (essentially
|
|
Packit |
a89ea5 |
# a compact form of File::Temp without all the extras) taken from
|
|
Packit |
a89ea5 |
# the Perl cookbook
|
|
Packit |
a89ea5 |
|
|
Packit |
a89ea5 |
# Would not
|
|
Packit |
a89ea5 |
|
|
Packit |
a89ea5 |
use strict;
|
|
Packit |
a89ea5 |
use Benchmark;
|
|
Packit |
a89ea5 |
use IO::File;
|
|
Packit |
a89ea5 |
use POSIX qw/ tmpnam /;
|
|
Packit |
a89ea5 |
use File::Temp qw/ tempfile /;
|
|
Packit |
a89ea5 |
use Symbol;
|
|
Packit |
a89ea5 |
|
|
Packit |
a89ea5 |
# Benchmark IO::File and File::Temp
|
|
Packit |
a89ea5 |
|
|
Packit |
a89ea5 |
timethese(10000, {
|
|
Packit |
a89ea5 |
'IO::File' => sub {
|
|
Packit |
a89ea5 |
my $fh = IO::File::new_tmpfile || die $ !;
|
|
Packit |
a89ea5 |
},
|
|
Packit |
a89ea5 |
'File::Temp::tempfile' => sub {
|
|
Packit |
a89ea5 |
my $fh = tempfile() || die $ !;
|
|
Packit |
a89ea5 |
},
|
|
Packit |
a89ea5 |
'POSIX::tmpnam' => sub {
|
|
Packit |
a89ea5 |
my $fh = gensym;;
|
|
Packit |
a89ea5 |
my $name;
|
|
Packit |
a89ea5 |
for (;;) {
|
|
Packit |
a89ea5 |
$name = tmpnam();
|
|
Packit |
a89ea5 |
sysopen( $fh, $name, O_RDWR | O_CREAT | O_EXCL )
|
|
Packit |
a89ea5 |
&& last;
|
|
Packit |
a89ea5 |
}
|
|
Packit |
a89ea5 |
unlink $name;
|
|
Packit |
a89ea5 |
}
|
|
Packit |
a89ea5 |
}
|
|
Packit |
a89ea5 |
);
|
|
Packit |
a89ea5 |
|
|
Packit |
a89ea5 |
|