I've made the changes you have sugessted but i still get the "Free to wrong pool 1a49800 not 15d26e8 during global destruction." error.
P.S. bellow you'll find the code with the chnages you've sugessted. #start code use threads; use warnings; use strict; use Cwd; my $currDir = `cd`; chop($currDir); opendir my $ip_main_dir, $currDir or die "Cannot open $currDir: $!"; #remove '.' and '..' my @allBatchFolders = grep /^[a-z]{3}$/, readdir $ip_main_dir; #open stat file for writing open my $statfile, '>', "$currDir/stat.txt" or die "Cannot open $currDir/stat.txt: $!"; my $index = 0; my @aThread; foreach my $aDir ( @allBatchFolders ) { push @aThread, threads->new( \&writeStat, $aDir ); my @ReturnData = $aThread[ -1 ]->join(); } closedir($ip_main_dir); close($statfile); sub writeStat { my $localDir = "$currDir/$_[0]"; opendir my $directory, $localDir or die "Cannot open $localDir: $!"; print "Start while loop: $_[0]\n"; print $statfile "Start wile loop: $_[0]\n"; rewinddir($directory); my $file; while ( $file = readdir($directory) ) { writeToFile( $_[0], $file ); } print $statfile "End while loop: $_[0]\n"; print "End while loop: $_[0]\n"; closedir($directory); } sub writeToFile : locked { print $statfile "Thread $_[0]: $_[1]\n"; } #end code "John W. Krahn" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Sharmarke Aden wrote: > > > > I'm new to Perl and trying to access several directories at the same time > > and simply read the content of the directory and do some processing on the > > files in those directories. The code below is a reference code to get > > started on the real work. The code below however crashes and I'm lost as to > > what the cause is. Any help you could give me I'd appreciate it. This code > > simple in that it looks for 3 letter directories and creates a stats file > > used to report the files in that directory. Eventually what I'll want to do > > is run those files through processing and take advantage of a bitching 8 > > processor machine we just got. BTW I'm using Perl 5.6 on win 2000 machine > > (ActivePerl-5.6.0.623-MSWin32-x86-multi-thread to be exact). > > I don't use Windows, but from what I understand, the threading in Perl 5.8 is a > lot better than that in 5.6 > > > > use threads; > > You should use the warnings and strict pragmas while developing your program. > > use warnings; > use strict; > > > > $currDir = `cd`; > > chop($currDir); > > You should use the Cwd module for this. > > use Cwd; > > my $currDir = cwd; > > > > opendir(IP_MAIN_DIR, $currDir); > > You should ALWAYS verify that opendir worked correctly. > > opendir my $ip_main_dir, $currDir or die "Cannot open $currDir: $!"; > > > > #remove '.' and '..' > > > > @allBatchFolders = grep !/^\.\.?$/, readdir IP_MAIN_DIR; > > #get the names of all the 3 character directories in to a list/array ("aaa" > > and "aab, and "aac" qualify) > > > > @allBatchFolders = grep /^[a-z][a-z][a-z]$/, @allBatchFolders; > > You can skip the "#remove '.' and '..'" step because filenames with only three > letters won't have any dots in them. > > my @allBatchFolders = grep /^[a-z]{3}$/, readdir $ip_main_dir; > > > > #open stat file for writing > > open(STATFILE, ">$currDir\\stat.txt"); > > You should ALWAYS verify that open worked correctly. There is no need to use > backslashes in path names as slashes will work just fine. > > open my $statfile, '>', "$currDir/stat.txt" or die "Cannot open $currDir/stat.txt: $!; > > > > $index = 0; > > > > foreach $aDir (@allBatchFolders) > > { > > $aThread[$index] = threads->new(\&writeStat, $aDir); > > @ReturnData = $aThread[$index]->join(); > > $index++; > > } > > my @aThread; > foreach my $aDir ( @allBatchFolders ) > { > push @aThread, threads->new( \&writeStat, $aDir ); > my @ReturnData = $aThread[ -1 ]->join(); > } > > > > closedir(IP_MAIN_DIR); > > close(STATFILE); > > > > sub writeStat > > { > > $localDir = $currDir . "\\" . $_[0]; > > my $localDir = "$currDir/$_[0]"; > > > > local *DIRECTORY; > > opendir(DIRECTORY, $localDir); > > You should ALWAYS verify that opendir worked correctly. > > opendir my $directory, $localDir or die "Cannot open $localDir: $!"; > > > > print "Start wile loop: @_[0]\n"; > ^^^^^ > > print STATFILE "Start wile loop: @_[0]\n"; > ^^^^^ > You are using an array slice when you should be using a scalar. If you had warnings > enabled this would have produced a warning message. > > print "Start while loop: $_[0]\n"; > print STATFILE "Start while loop: $_[0]\n"; > > > > rewinddir( DIRECTORY ); > > while ($file = readdir(DIRECTORY)) > > { > > writeToFile(@_[0], $file); > ^^^^^ > writeToFile( $_[0], $file ); > > > } > > print STATFILE "End wile loop: @_[0]\n"; > ^^^^^ > print STATFILE "End while loop: $_[0]\n"; > > > > print "End wile loop: @_[0]\n"; > ^^^^^ > print "End while loop: $_[0]\n"; > > > > closedir(DIRECTORY); > > } > > > > sub writeToFile > > { > > use attrs qw(locked); > > print STATFILE "Thread @_[0]: @_[1]\n"; > ^^^^^ ^^^^^ > print STATFILE "Thread $_[0]: $_[1]\n"; > > > } > > > > John > -- > use Perl; > program > fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]