#!/usr/bin/perl -w use strict; if( !eval( "require Time::HiRes;" ) ) { print "Time::HiRes not installed; benchmarks cannot be done\n"; } opendir( DIR, "./bench" ); my @files = readdir(DIR); closedir( DIR ); foreach my $file ( @files ) { if( $file =~ m/(.+)\.tmpl/ ) { print "Processing $file\n"; tmplfile( './bench/'.$file, $1 ); print "\n"; } } sub tmplfile { my $file = shift; my $name = shift; open(TMPL,"$file"); $/ = undef; my $tmpl = ; close(TMPL); $tmpl =~ s/#([c+0-])/#-$1/g; #print $tmpl; my @parts = split('#-',$tmpl); open(OUT,">./bench/one$name.pl"); my $div; sub has_cc { my $div = (substr($ENV{'PATH'},0,1) eq '/') ? ':' : ';'; my @path = split($div,$ENV{'PATH'}); foreach my $dir ( @path ) { return 1 if( -e "$dir/cc" || -e "$dir/gcc" || -e "$dir/cc.exe" || -e "$dir/gcc.exe" ); } return 0; } if( $^O eq 'MSWin32' && !has_cc() ) { $div = '\\'; } else { $div = '/'; } print OUT <; close(FILE); } START #{ # (\$s, \$usec) = gettimeofday(); # if( eval( "require XML::Bare;" ) ) { # (\$s2, \$usec2) = gettimeofday(); # my \$ob = new XML::Bare( file => \$file ); # \$root = \$ob->parse(); # (\$s3, \$usec3) = gettimeofday(); # timeit('XML::Bare',1); # } #} #START my $comment = ''; my $i = -1; foreach my $part ( @parts ) { my @requires; $part = '#'.$part; my $type = ''; my $module = ''; if( $part =~ m/#([c\-0\+]) (.+)\n/ ) { $type = $1; my $name = $2; $module = $name if( $name =~ m/\w/ ); } if( $part =~ m/#([c\-0\+]\+?)\n/ ) { $type = $1; } #print "[$type $module]\n"; if( $type eq 'c' ) { $part =~ s/c\n//g; $part = "##".$part."##"; $part =~ s/^##[#c \n]+//; $part =~ s/[ \n]+##$//; $comment = $part; next; } if( $type eq '0' ) { if( $module ) { $part =~ s/(#0)\W*.*/$1/; } while( $part =~ m/(require [A-Za-z\:]+;)/g ) { my $req = $1; if( !$module ) { my $fmod = $req; $fmod =~ s/require //; $fmod =~ s/;//; $module = $fmod; } push( @requires, $req ); } $part =~ s/require [A-Za-z\:]+;\n//g; $part = "##".$part."##"; $part =~ s/^##[#0 \n]+//; $part =~ s/[ \n]+##$//; print OUT " if( \$ARGV[0]*1 >= $i ) { (\$s, \$usec) = gettimeofday(); if( eval( '@requires' ) ) { (\$s2, \$usec2) = gettimeofday(); $part (\$s3, \$usec3) = gettimeofday(); unload('$module'); timeit('$module',1); } } "; } if( $type eq '-' ) { if( $module ) { $part =~ s/(#[\-\0\+])\W*.*/$1/; } while( $part =~ m/(require [A-Za-z\:]+;)/g ) { my $req = $1; if( !$module ) { my $fmod = $req; $fmod =~ s/require //; $fmod =~ s/;//; $module = $fmod; } push( @requires, $req ); } $part =~ s/require [A-Za-z\:]+;\n//g; $part = "##".$part."##"; $part =~ s/^##[#\- \n]+//; $part =~ s/[ \n]+##$//; print OUT " if( \$ARGV[0] eq '$i' ) { (\$s, \$usec) = gettimeofday(); if( eval( '@requires' ) ) { (\$s2, \$usec2) = gettimeofday(); $part (\$s3, \$usec3) = gettimeofday(); unload('$module'); timeit('$module'); } } "; } if( $type eq '+' ) { $part = "##".$part."##"; $part =~ s/^##[#\+ \n]+//; $part =~ s/[ \n]+##$//; print OUT " if( \$ARGV[0] eq '$i' ) { $part } "; } if( $type eq '0+' ) { $part = "##".$part."##"; $part =~ s/^##[0#\+ \n]+//; $part =~ s/[ \n]+##$//; print OUT " #if( \$ARGV[0] eq '$i' ) { $part #} "; } $i++; } print OUT < 8 ) { \$a = substr( \$a, 8 ); } if( \$len < 8 ) { while( \$len < 8 ) { \$a = "\${a} "; \$len = length( \$a ); } } return \$a; } END close(OUT); open( SH, ">./bench/$name.pl" ); my $end = $i+1; print SH "#!/usr/bin/perl "; if( $comment ) { print SH " print <