in reply to Re^4: "Thread already joined at..." and "A thread exited while x threads were running" errors
in thread "Thread already joined at..." and "A thread exited while x threads were running" errors

I'm trying to find a way of doing a hash that retains its order.

Try Tie::IxHash; it's a pure perl module.

I cannot reproduce your crashes. Try this slightly re-formatted version of your program and see if you still get problems. I've used some perl one-liners as the scripts to run which ought to be a pretty good simulation of your script processor.

#! perl -slw use Cwd; use Config; use Data::Dumper; use threads; use Benchmark qw(:all); use strict; use warnings; # Change this structure accordingly... my %allScripts = ( submitters => { numRuns => 4, steps => [ q[perl -wle"sleep int rand 3; print 'step1'"], q[perl -wle"sleep int rand 3; print 'step2'"] ] }, reviewers => { numRuns => 1, steps => [ q[perl -wle"sleep int rand 3; print 'step1'"], q[perl -wle"sleep int rand 3; print 'step2'"] ] } ); my $numCompleteTestRuns = 4; my $mscriptInterpreter = "ScriptRunner.exe"; my $currentDir = getcwd(); eval{ timethis( $numCompleteTestRuns, 'runTests' ) }; warn $@ if $@; sub runTests { print "Waiting to spawn processes."; foreach my $userType ( sort{ $allScripts{$a} <=> $allScripts{$b} } keys %allScripts ) { print "The $userType will run $allScripts{$userType}{numRuns} +times. The steps are:"; foreach my $i (0 .. $#{ $allScripts{$userType}{steps}}) { print "$i = $allScripts{$userType}{steps}[$i]"; } } my @threadList = (); foreach my $userType ( sort {$allScripts{$a} <=> $allScripts{$b}} keys %allScripts ) { for my $i (0 .. $allScripts{$userType}{numRuns}) { print "About to create $userType thread $i:"; my $thread = threads->new(\&stepThread, \$allScripts{$user +Type}); push (@threadList, $thread); } } my $numThreads = @threadList; print "There are $numThreads threads"; # wait for each running thread to end foreach my $thread (@threadList) { $thread->join; print "A thread joined"; } print "Processes ended - Goodbye"; } # thread runs a type of users steps once only sub stepThread { print "starting thread"; my $currentUsertype = shift; foreach my $i ( 0 .. $#{ ${$currentUsertype}->{steps} } ) { my $fileName = ${ $currentUsertype }->{steps}[$i]; my $command = $fileName; print( "About to run: $fileName" ); my $time0 = new Benchmark; my $output = `$command`; my $time1 = new Benchmark; my $timeTaken = timestr( timediff( $time1, $time0 ) ); print "BEGIN $fileName\n'$output'\nEND $fileName output (time +taken: $timeTaken)"; } print( "Ending thread" ); }

The output I got:

Waiting to spawn processes. The submitters will run 4 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" The reviewers will run 1 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" About to create submitters thread 0: About to create submitters thread 1: About to create submitters thread 2: About to create submitters thread 3: About to create submitters thread 4: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" About to create reviewers thread 0: About to create reviewers thread 1: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread There are 7 threads A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined Processes ended - Goodbye Waiting to spawn processes. The submitters will run 4 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" The reviewers will run 1 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" About to create submitters thread 0: About to create submitters thread 1: About to create submitters thread 2: About to create submitters thread 3: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" About to create submitters thread 4: About to create reviewers thread 0: About to create reviewers thread 1: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.19 usr + 0.00 sys = 0.19 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.19 usr + 0.00 sys = 0.19 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.19 usr + 0.00 sys = 0.19 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.03 usr + 0.00 sys = 0.03 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread There are 7 threads A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined Processes ended - Goodbye Waiting to spawn processes. The submitters will run 4 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" The reviewers will run 1 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" About to create submitters thread 0: About to create submitters thread 1: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" About to create submitters thread 2: About to create submitters thread 3: About to create submitters thread 4: About to create reviewers thread 0: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" About to create reviewers thread 1: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.14 usr + 0.00 sys = 0.14 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.14 usr + 0.00 sys = 0.14 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.14 usr + 0.00 sys = 0.14 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.14 usr + 0.00 sys = 0.14 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.27 usr + 0.00 sys = 0.27 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 3 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 3 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread There are 7 threads A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined Processes ended - Goodbye Waiting to spawn processes. The submitters will run 4 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" The reviewers will run 1 times. The steps are: 0 = perl -wle"sleep int rand 3; print 'step1'" 1 = perl -wle"sleep int rand 3; print 'step2'" About to create submitters thread 0: About to create submitters thread 1: About to create submitters thread 2: About to create submitters thread 3: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" About to create submitters thread 4: About to create reviewers thread 0: About to create reviewers thread 1: starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.22 usr + 0.03 sys = 0.25 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.22 usr + 0.03 sys = 0.25 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 0 +wallclock secs ( 0.22 usr + 0.02 sys = 0.23 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" starting thread About to run: perl -wle"sleep int rand 3; print 'step1'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 1 +wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step1'" 'step1 ' END perl -wle"sleep int rand 3; print 'step1'" output (time taken: 2 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) About to run: perl -wle"sleep int rand 3; print 'step2'" BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 0 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread BEGIN perl -wle"sleep int rand 3; print 'step2'" 'step2 ' END perl -wle"sleep int rand 3; print 'step2'" output (time taken: 1 +wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)) Ending thread There are 7 threads A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined A thread joined Processes ended - Goodbye timethis 4: 14 wallclock secs ( 1.28 usr + 0.06 sys = 1.34 CPU) @ 2 +.98/s (n=4)

I still have my doubts as the effectiveness as your mostly timing how long it tales to spawn threads and processes here--but you can make your own mind up on that:)


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon
  • Comment on Re^5: "Thread already joined at..." and "A thread exited while x threads were running" errors
  • Select or Download Code

Replies are listed 'Best First'.
Re^6: "Thread already joined at..." and "A thread exited while x threads were running" errors
by nickos (Initiate) on Sep 07, 2004 at 13:02 UTC
    "Try Tie::IxHash; it's a pure perl module."

    Thanks for the advice, I'll look at that...

    "I cannot reproduce your crashes."

    Damn. I've just run your code and I still get the same problem. What platform are you using? (I'm on Win2k)

      That was XP/ActiveState 810, and I get the same results with my home-built 5.8.5.

      P:\test>perl -v This is perl, v5.8.4 built for MSWin32-x86-multi-thread (with 3 registered patches, see perl -V for more detail) Copyright 1987-2004, Larry Wall Binary build 810 provided by ActiveState Corp. http://www.ActiveState. +com ActiveState is a division of Sophos. Built Jun 1 2004 11:52:21

      I'm not sure what to suggest. There is no obvious reason why 2K would be the cause of failure.

      Post the -V (not -v as above) from your copy of perl...maybe something will show up?


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      "Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon

        Here we go:

        C:\benchmarker>perl -V
        Summary of my perl5 (revision 5 version 8 subversion 4) configuration: Platform: osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef usethreads=undef use5005threads=undef useithreads=define usemultip +licity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D +_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DPERL_IMPLICI +T_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX', optimize='-MD -Zi -DNDEBUG -O1', cppflags='-DWIN32' ccversion='', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64 +', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -l +ibpath:"C:\Perl\lib\CORE" -machine:x86' libpth=C:\PROGRA~1\MICROS~3\VC98\lib libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netap +i32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.li +b odbccp32.lib msvcrt.lib perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool +.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib n +etapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc3 +2.lib odbccp32.lib msvcrt.lib libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib gnulibc_version='undef' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt: +ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x86' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES PERL +_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS Locally applied patches: ActivePerl Build 810 22751 Update to Test.pm 1.25 21540 Fix backward-compatibility issues in if.pm Built under MSWin32 Compiled at Jun 1 2004 11:52:21 @INC: C:/Perl/lib C:/Perl/site/lib .

        Thanks for all the help so far BTW.