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).

 

#code starts

 

use threads; 

 

$currDir = `cd`;
chop($currDir);
opendir(IP_MAIN_DIR, $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;

 

#open stat file for writing
open(STATFILE, ">$currDir\\stat.txt");
$index = 0;

foreach $aDir (@allBatchFolders)
{
  $aThread[$index] = threads->new(\&writeStat, $aDir);
 @ReturnData = $aThread[$index]->join();
 $index++;
}

closedir(IP_MAIN_DIR);
close(STATFILE);

 

sub writeStat
{
  $localDir = $currDir . "\\" . $_[0];
  local *DIRECTORY;
  opendir(DIRECTORY, $localDir);
  print "Start wile loop: @_[0]\n";
  print STATFILE "Start wile loop: @_[0]\n";
  rewinddir( DIRECTORY );
  while ($file = readdir(DIRECTORY))
  {
    writeToFile(@_[0], $file);   
  }
  print STATFILE "End wile loop: @_[0]\n";
  print "End wile loop: @_[0]\n";
  closedir(DIRECTORY);
}

 

sub writeToFile 

{

    use attrs qw(locked); 
    print STATFILE "Thread @_[0]: @_[1]\n";
}

 

#code ends

 

 

 

----------------------------------------------------------------

Sharmarke Aden

Continental DataGraphics [www.cdgpd.com <http://www.cdgpd.com> ]

Direct: (425) 691-2583

Fax: (425) 450-1935

Email: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> 

----------------------------------------------------------------

 

Reply via email to