>    6. perl 5.8.x/Excel vis Win32::OLE - file creation.seek issue
>       ([EMAIL PROTECTED])
> ----------------------------------------------------------------------
> Message: 6
> Date: Thu, 9 Mar 2006 08:23:27 -0500
> From: [EMAIL PROTECTED]
> Subject: perl 5.8.x/Excel vis Win32::OLE - file creation.seek issue
> To: [email protected]
> Message-ID:
> <[EMAIL PROTECTED]>
> 
> Content-Type: text/plain;   charset="US-ASCII"
> 
> I have two issues with the following script:
> 
> 1: it wont create a file when there is none
> 2: i don't know how to jump to the final row when the file exists so as 
to 
> not overwrite information
> 
> i spent several hours yesterday scouring google on variations of "perl 
ole 
> excel" with other modifiers to try to get the answers and have not found 

> them.
> 
> thank you in advance for your help.
> 
> -josh
> 
> #! /usr/bin/perl
> use strict;
> use warnings;
> use Getopt::Long; # used in getting unix-style options
> use Win32::OLE;
> use Win32::OLE::Const 'Microsoft Excel'; # use OLE/Excel
> $Win32::OLE::Warn = 3; # die on errors...
> 
> 
################################################################################
> # Purpose:
> #    This script catalogues and reports informationon lab systems
> #
> # This should be kept as both a script and an executable. The executable 

> should
> # be made by the last person to revise the script. The Active State Perl 

> PDK has
> # been used.
> #
> # Created: 03/02/2006
> # Original Author: Josh Perlmutter
> # Maintainers:
> # Last Revised: 03/07/2006
> # Copyright SeaChange International (tm)
> 
################################################################################
> 
> my(@comps);
> my($comp, $date);
> # standard options/revision information variables
> # verbose line is 79 chars long w/2 \t
> # base to use to add options:        -<option>\t\t<use>
> my($help, $usage, $verb, $qrev, $rev, $revdat, $modules, $log, $err);
> $modules="\tnone as of now\n\n"; $help=0; $qrev=0; $err=0;
> $rev="0.0.3"; $revdat="03/08/2006"; $verb=0; $log='';
> $usage = <<EOD;
> \tFile: $0\tVersion: $rev\tReleased: $revdat\n
> This is the $0 file.\n
> The options for this file are:
>         -help           This help screen only (overrides all other 
> options)
>         -log            File to log to (appends if the file exists)
>         -version        List Version and exit (overrides everything but 
> -help)
>         -verbose        Turn on verbose (useful for debugging errors; 
call 
> twice
>                          for extra output)
> 
>         usage ([] denotes optional argument {} denotes default value
>                {} denotes option set of which your choice of one is 
> required):
> $0 [-help] [-version] [-verbose]
> to debug try: $0 -verb -verb > debug_log.txt\n
> EOD
> 
> # short explanation of variables:
> 
> 
> ######
> # this section deals with options. it looks for unix-style options 
passed. 
> that
> # is, <script> -option [value]
> # now get the options 
> GetOptions ('help'=>\$help, 'verbose+'=>\$verb, 'version'=>\$qrev,
>             'log:s'=>\$log, 'computers:s' => \$comp);
> 
> 
> ###########################
> # arguments ARE required
> unless($help || $qrev ||
>        ($log)){
>   my $necessary = <<EOD;
>         You must supply at least 1 parameter(s) to run this program. It 
> needs:
> -log     log file to log actions to (appends if existing)
> Turning on help
> EOD
>   print $necessary;
>   $help++;
> }
> 
> #
> # now put the options to use...
> #
> 
> # show usage and exit if asked for
> die $usage if $help;
> 
> # report version and exit
> die "\tFile: $0\tVersion: $rev\tReleased: $revdat\n" if $qrev;
> 
> ####################################################
> ## this is a standardized reporting subroutine #####
> ## it takes a line and a flag for verbose and  #####
> ## reports to a universal file handle (and screen) #
> ####################################################
> sub rep{
>   # this assumes two passed values,
>   # first a message
>   # second a flag for verbose (screen printing)
>   my $time=localtime().' | ';
>   print LOG "$time $_[0]\n";
>   if($_[1]){ print STDOUT "$time $_[0]\n"; }
> }
> 
> sub getinfo(){
> 
> 
#############################################################################
>   ## this grabs the system information for reporting at the begining of 
> logs ##
> 
> 
#############################################################################
> 
>   my $nname=`hostname`; chomp($nname);
>   my $nos=`ver`; $nos =~ s/\W*(\w.*\])\s.*/$1/;
>   my $nip=`ipconfig`; $nip =~ s/\D+([\d\.]{7,15})[\D\d]*/$1/;
> 
>   my $info= <<EOD;
> Program Information:
> Script: $0
> Last Updated: $revdat          Version $rev
> 
> System Information:
>        Node Name: $nname
>        Node OS: $nos
>        Node IP: $nip
> 
> EOD
>   return $info;
> }
> 
> sub dbg{
>   # this is a debugging subroutine that prints things to screen if the
>   # verbosity level is high enough
>   my $item=$_[1];
>   my $dbgpt=$_[0];
> 
>   while(1){
>     print "Debug Point: $dbgpt\nItem value:\n$item
> \n\t\tShall I continue? (y or n)\n\n";
>     if(<STDIN> =~ m/^n$/i){ die "\t\t\tyou chose to leave at 
$dbgpt\n\n"; 
> }
>     elsif(<STDIN> =~ m/^y$/i){ print "Continuing to next point\n\n"; 
last; 
> }
>     else{ print "response not understood\n"; }
>   }
> }
> 
> # start the log
> open LOG, ">>$log" or die "cannot open log file";
> &rep(&getinfo,$verb);
> ############################ Below is non-templeted 
> ############################
> # make the computer list an array
> @comps=split ',', $comp;
> 
> # get the date
> my @rdate=split ' ', localtime();
> $date=$rdate[4].'-'.$rdate[1].'-'.$rdate[2];
> if($verb>1){ &rep("$date\n",$verb); }
> 
> foreach $comp (@comps){
>   # for each computer in the array
>   # get the following information placed into a file
>   # titled by the computer name and date
>   # or tell use why there is an error and exit
> 
>   my $err=0; # error indicator
> 
>   # this should be 0 on error and 1 on success
>   my $cmd="psinfo -h -s \\\\$comp > $comp-$date.txt";
>   my $res=system "$cmd";
> 
>   if($res){
>     my $err_rep="\t\tinformation gathering error!";
>     $err_rep.=" $res Information may not be complete.
> \t\tcommand: $cmd\n$!\n$^E\n\n";
>     &rep($err_rep,$verb);
>   }else{
>     &rep("Cataloged $comp to $comp-$date.txt\n",$verb);
>   }
> 
> }
> 
> #######
> ## OLE interaction upon the saved files follows
> #######
> 
> # get an active Excel or create a new one
> my $Excel = Win32::OLE -> GetActiveObject('Excel.Application')
>   || Win32::OLE -> new('Excel.Application', 'Quit');
> 
> my $labrep="./Lab_Report_$date.xls";
> 
> # does the file exit?
> if(-e "$labrep"){
>   #we are just adding to it, so open it
>   my $report = $Excel->Workbooks->Open("$labrep");
>   my $ws = $report -> Worksheets(1);
> 
>   my $ldate = localtime();
>   &rep("Examining information gathered from lab computers @ $ldate\n", 
> $verb);
> 
>   # start row counter
>   my 
$row=2;###################<----------------------------bad!!!!!!!!!!!
> 
>   foreach my $node (@comps){
>     # for each node we check the information returned
>     # if there is no information we only have two items to place on the 
> row,
>     # otherwise we have A-V items
> 
>     # set the first cell since that's always going to be the same
>     $ws -> Cells($row, "A") -> ('Value') = "$node";
> 
>     # try to open the file with the information
>     open LNINFO, "<$comp-$date.txt" or $err=1;
> 
>     if($err){
>       # there was an error on the file, so note that in the report
>       $ws -> Cells($row, "B") -> ('Value') =
>         "$comp-$date.txt could not be opened to be put into the lab 
> report. $! $^E\n";
> 
>     }else{
>       # there was no error, so now we check the file,
>       # first reading in the file
>       my @examine;
>       while(<LNINFO>){
>         push @examine, $_;
>       }
> 
>       # then noting which couldnt be connected to
>       if($examine[6] =~ m/The network path was not found./i ){
>         $ws -> Cells($row, "B") -> ('Value') = "The network path was not 

> found.";
> 
>       }else{
>         # we need to run through the file for the information to put 
into 
> the rows
> 
>         # drop what's before what we need
>         while (!($examine[0] =~ m/Uptime.*/i)){ shift(@examine); }
> 
>         while (!($examine[0] =~ m/OS Hot Fix.*/i)){
>           # now go through a series of if/elsif sections for the rest
>           # hot fixes and programs will be handled slightly differently 
> though
> 
>           if($examine[0] =~ m/Uptime:\s+(\w.*)/i){
>             $ws -> Cells($row, "E") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Kernel version:\s+(\w.*)/i){
>             $ws -> Cells($row, "F") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Product type:\s+(\w.*)/i){
>             $ws -> Cells($row, "G") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Product version:\s+(\w.*)/i){
>             $ws -> Cells($row, "H") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Service pack:\s+(\w.*)/i){
>             $ws -> Cells($row, "I") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Kernel build number:\s+(\w.*)/i){
>             $ws -> Cells($row, "J") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Registered organization:\s+(\w.*)/i){
>             $ws -> Cells($row, "K") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Registered owner:\s+(\w.*)/i){
>             $ws -> Cells($row, "L") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Install date:\s+(\w.*)/i){
>             $ws -> Cells($row, "M") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Activation status:\s+(\w.*)/i){
>             $ws -> Cells($row, "N") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/IE version:\s+(\w.*)/i){
>             $ws -> Cells($row, "O") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/System root:\s+(\w.*)/i){
>             $ws -> Cells($row, "P") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Processors:\s+(\w.*)/i){
>             $ws -> Cells($row, "Q") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Processor speed:\s+(\w.*)/i){
>             $ws -> Cells($row, "R") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Processor type:\s+(\w.*)/i){
>             $ws -> Cells($row, "S") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Physical memory:\s+(\w.*)/i){
>             $ws -> Cells($row, "T") -> ('Value') = "$1";
>           }
>         }
> 
>         #  remove the line starting "OS Hot Fix..."
>         shift(@examine);
>         # create a variable for holding the hotfixes
>         my $hotfixes="\"";
> 
>         while (!($examine[0] =~ m/Applications.*/i)){
>           # while hot fixes need to be added. skip blank lines
>           if($examine[0] =~ m/\w/){
>             chomp($examine[0]);
>             $hotfixes .="$examine[0]\n";
>           }
>         }
> 
>         # add the hotfixes
>         $ws -> Cells($row, "U") -> ('Value') = "$hotfixes";
> 
>         #  remove the line starting "Applications..."
>         shift(@examine);
> 
>         my $apps='';
>         foreach my $app (@examine){
>           # the rest should all be applications to add
>           # so we're using a foreach to put them in
>           # only add lines that are not blank
>           # there are 3 special lines: NAV, Alarms, and SNMP
>           if($app =~ m/Symantec AntiVirus (\w+)/i){
>             $ws -> Cells($row, "B") -> ('Value') = "ver: $1";
>           }elsif($app =~ m/Alarm/i){
>             $ws -> Cells($row, "C") -> ('Value') = "Installed";
>           }elsif($app =~ m/SNMP Informant Agent \(([^\)]+)\) (\w.*)/i){
>             $ws -> Cells($row, "D") -> ('Value') = "$1 : $2";
>           }elsif($app =~ m/\s+(\w.*)/i){
>             $apps .= "$1\n";
>           }
>         }
> 
>         # add the other applications
>         $ws -> Cells($row, "V") -> ('Value') = "$apps";
>       }
>     }
> 
>     # end the loop increasing the row number
>     $row++;
>   }
> }else{
>   # we have to create it, including make the first row
>   $Excel -> {'Visible'} = 1;
>   $Excel -> { 'SheetsInNewWorkBook' } = 1;
>   my $workbook = $Excel -> Workbooks -> Add();
>   my $ws = $workbook -> Worksheets(1);
>   $ws -> { 'Name' } = "Lab Report $date";
> 
>   # set first row titles
>   $ws -> Cells(1, "A") -> ('Value') = "Node";
>   $ws -> Cells(1, "B") -> ('Value') = "NAV";
>   $ws -> Cells(1, "C") -> ('Value') = "Alarms";
>   $ws -> Cells(1, "D") -> ('Value') = "SNMP";
>   $ws -> Cells(1, "E") -> ('Value') = "Uptime";
>   $ws -> Cells(1, "F") -> ('Value') = "Kernel Version";
>   $ws -> Cells(1, "G") -> ('Value') = "Product Type";
>   $ws -> Cells(1, "H") -> ('Value') = "Product Version";
>   $ws -> Cells(1, "I") -> ('Value') = "Service Pack";
>   $ws -> Cells(1, "J") -> ('Value') = "Kernel Build Number";
>   $ws -> Cells(1, "K") -> ('Value') = "Registered Organization";
>   $ws -> Cells(1, "L") -> ('Value') = "Registered Owner";
>   $ws -> Cells(1, "M") -> ('Value') = "Install Date";
>   $ws -> Cells(1, "N") -> ('Value') = "Activation Status";
>   $ws -> Cells(1, "O") -> ('Value') = "IE Version";
>   $ws -> Cells(1, "P") -> ('Value') = "System Root";
>   $ws -> Cells(1, "Q") -> ('Value') = "Processors";
>   $ws -> Cells(1, "R") -> ('Value') = "Processor Speed";
>   $ws -> Cells(1, "S") -> ('Value') = "Processor Type";
>   $ws -> Cells(1, "T") -> ('Value') = "Physical Memory";
>   $ws -> Cells(1, "U") -> ('Value') = "Installed OS Hotfixes";
>   $ws -> Cells(1, "V") -> ('Value') = "Other Applications";
> 
>   my $ldate = localtime();
>   &rep("Examining information gathered from lab computers @ $ldate\n", 
> $verb);
> 
>   # start row counter
>   my $row=2;
> 
>   foreach my $node (@comps){
>     # for each node we check the information returned
>     # if there is no information we only have two items to place on the 
> row,
>     # otherwise we have A-V items
> 
>     # set the first cell since that's always going to be the same
>     $ws -> Cells($row, "A") -> ('Value') = "$node";
> 
>     # try to open the file with the information
>     open LNINFO, "<$comp-$date.txt" or $err=1;
> 
>     if($err){
>       # there was an error on the file, so note that in the report
>       $ws -> Cells($row, "B") -> ('Value') =
>         "$comp-$date.txt could not be opened to be put into the lab 
> report. $! $^E\n";
> 
>     }else{
>       # there was no error, so now we check the file,
>       # first reading in the file
>       my @examine;
>       while(<LNINFO>){
>         push @examine, $_;
>       }
> 
>       # then noting which couldnt be connected to
>       if($examine[6] =~ m/The network path was not found./i ){
>         $ws -> Cells($row, "B") -> ('Value') = "The network path was not 

> found.";
> 
>       }else{
>         # we need to run through the file for the information to put 
into 
> the rows
> 
>         # drop what's before what we need
>         while (!($examine[0] =~ m/Uptime.*/i)){ shift(@examine); }
> 
>         while (!($examine[0] =~ m/OS Hot Fix.*/i)){
>           # now go through a series of if/elsif sections for the rest
>           # hot fixes and programs will be handled slightly differently 
> though
> 
>           if($examine[0] =~ m/Uptime:\s+(\w.*)/i){
>             $ws -> Cells($row, "E") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Kernel version:\s+(\w.*)/i){
>             $ws -> Cells($row, "F") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Product type:\s+(\w.*)/i){
>             $ws -> Cells($row, "G") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Product version:\s+(\w.*)/i){
>             $ws -> Cells($row, "H") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Service pack:\s+(\w.*)/i){
>             $ws -> Cells($row, "I") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Kernel build number:\s+(\w.*)/i){
>             $ws -> Cells($row, "J") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Registered organization:\s+(\w.*)/i){
>             $ws -> Cells($row, "K") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Registered owner:\s+(\w.*)/i){
>             $ws -> Cells($row, "L") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Install date:\s+(\w.*)/i){
>             $ws -> Cells($row, "M") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Activation status:\s+(\w.*)/i){
>             $ws -> Cells($row, "N") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/IE version:\s+(\w.*)/i){
>             $ws -> Cells($row, "O") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/System root:\s+(\w.*)/i){
>             $ws -> Cells($row, "P") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Processors:\s+(\w.*)/i){
>             $ws -> Cells($row, "Q") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Processor speed:\s+(\w.*)/i){
>             $ws -> Cells($row, "R") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Processor type:\s+(\w.*)/i){
>             $ws -> Cells($row, "S") -> ('Value') = "$1";
>           }elsif($examine[0] =~ m/Physical memory:\s+(\w.*)/i){
>             $ws -> Cells($row, "T") -> ('Value') = "$1";
>           }
>         }
> 
>         #  remove the line starting "OS Hot Fix..."
>         shift(@examine);
>         # create a variable for holding the hotfixes
>         my $hotfixes="\"";
> 
>         while (!($examine[0] =~ m/Applications.*/i)){
>           # while hot fixes need to be added. skip blank lines
>           if($examine[0] =~ m/\w/){
>             chomp($examine[0]);
>             $hotfixes .="$examine[0]\n";
>           }
>         }
> 
>         # add the hotfixes
>         $ws -> Cells($row, "U") -> ('Value') = "$hotfixes";
> 
>         #  remove the line starting "Applications..."
>         shift(@examine);
> 
>         my $apps='';
>         foreach my $app (@examine){
>           # the rest should all be applications to add
>           # so we're using a foreach to put them in
>           # only add lines that are not blank
>           # there are 3 special lines: NAV, Alarms, and SNMP
>           if($app =~ m/Symantec AntiVirus (\w+)/i){
>             $ws -> Cells($row, "B") -> ('Value') = "ver: $1";
>           }elsif($app =~ m/Alarm/i){
>             $ws -> Cells($row, "C") -> ('Value') = "Installed";
>           }elsif($app =~ m/SNMP Informant Agent \(([^\)]+)\) (\w.*)/i){
>             $ws -> Cells($row, "D") -> ('Value') = "$1 : $2";
>           }elsif($app =~ m/\s+(\w.*)/i){
>             $apps .= "$1\n";
>           }
>         }
> 
>         # add the other applications
>         $ws -> Cells($row, "V") -> ('Value') = "$apps";
>       }
>     }
> 
>     # end the loop increasing the row number
>     $row++;
>   }
> 
>   $workbook -> SaveAs($labrep); # save active sheet
> }
> 
> # save and exit
> $Excel -> Workbooks -> Save(); # save file
> $Excel -> Workbooks -> Quit(); # leave excel
> my $et=locatime();
> &rep("program completed at $et.",$verb); # wrap up log
> close LOG; # close log
> 
################################################################################
> __END__
> # # line used to help keep lines under 80 characters
> 
The errors I get are:
E:\lab reports\test18>rem information section is over, turning echo off.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Not a subroutine reference at compinfo.pl line 318.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Can't spawn "cmd.exe": Bad file descriptor at compinfo.pl line 157.
Win32::OLE(0.1702) error 0x8001010a: "The message filter indicated that 
the
application is busy"
    in PROPERTYPUT "Visible" at compinfo.pl line 311

E:\lab reports\test18>

which are lines 

311       $Excel -> {'Visible'} = 1;
318       $ws -> Cells(1, "A") -> ('Value') = "Node";

and are causing he program to die at those spots.

-----------------------------------------
PLEASE NOTE: 
SeaChange International headquarters in Maynard, MA is moving!
Effective March 1, 2006, our new headquarters address will be:

SeaChange International 
50 Nagog Park 
Acton, MA 01720 USA 

All telephone numbers remain the same: 
Main Corporate Telephone: 978-897-0100 
Customer Service Telephone: 978-897-7300

_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to