#!/usr/bin/perl
use strict;
use warnings;
use List::Compare;
use Config::Simple;
use Config::IniFiles;
use Fcntl qw(:flock);
use Benchmark qw(:all) ;
use Data::Dumper qw(Dumper);
$|=1; #flush every time the program
=flock
sub LOCK_SH { 1 } ## shared lock
sub LOCK_EX { 2 } ## exclusive lock
sub LOCK_NB { 4 } ## non-blocking
sub LOCK_UN { 8 } ## unlock
=cut
my %information;
my $path = 'conf.ini';
my $count = -5 || die "Need a count!\n";
sub complex {
open my $fh , '<' , "".$path.""
or die "Could not open file: ".$path." - $!\n";
flock($fh, LOCK_SH)
or die "Could not lock '".$fh."' - $!\n";
tie my %ini, 'Config::IniFiles', ( -file => "".$path."" )
or die "Error: IniFiles->new: @Config::IniFiles::errors";
close ($fh)
or die "Could not close '".$path."' - $!\n";
print Dumper(\%ini);
return %ini;
} # end sub complex
sub val {
open my $fr , '<' , "".$path.""
or die "Could not open file: ".$path." - $!\n";
flock($fr, LOCK_SH)
or die "Could not lock '".$fr."' - $!\n";
my $cfg = Config::IniFiles->new( -file => "".$path."" )
or die "error: IniFiles->new: @Config::IniFiles::errors";
close ($fr)
or die "Could not close '".$path."' - $!\n";
my $values = $cfg->val( 'Perl', 'test' );
my @array = split(',', $values);
print Dumper(\@array);
return @array;
} # End of sub val
sub simple {
open my $fr , '<' , "".$path.""
or die "Could not open file: ".$path." - $!\n";
flock($fr, LOCK_SH)
or die "Could not lock '".$fr."' - $!\n";
Config::Simple->import_from( "".$path."", \%information)
or die Config::Simple->error();
close ($fr)
or die "Could not close '".$path."' - $!\n";
print Dumper(\%information);
return %information;
} # End of sub simple
my $r = timethese ( $count ,
{ 'complex' => '&complex',
'val' => '&val',
'simple' => '&simple' } );
cmpthese $r;
####
[Perl]
test= bar,baz,foo,quux
####
val: 6 wallclock secs ( 5.69 usr + 0.30 sys = 5.99 CPU) @ 989.98/s (n=5930)
Rate complex val simple
complex 700/s -- -29% -46%
val 990/s 41% -- -24%
simple 1297/s 85% 31% --