Still cannot see why Perl complains that Could not open file for reading. File or directory does exist. I have modified my script and now using Getopt::Long module instead of the @ARGV variable. Can someone take a look?
The script is now run with command line options like this: myscript --master --compare file_name --compare another_file Here is a section of the script use strict; use warnings; #use diagnostics; use Getopt::Long; use constant DEFAULT_REPORTDIR => ".\\compare_report"; my $master_list = ""; my @compare_lists = ""; my $help = ""; Getopt::Long::Configure ("ignorecase"); GetOptions( "master=s" => \$master_list, "compare:s" => [EMAIL PROTECTED], "help|?!" => \$help, ); usage() if $help; @compare_lists = split(' ',join(' ',@compare_lists)); foreach (@compare_lists){ die "File $_ does not exist or it's empty. Please check the file try again.\n" unless -s $_; } ################################ #foreach (@compare_lists){print "$_\n";} # This prints the CLI arguments correctly. ################################# my $outputdir = DEFAULT_REPORTDIR; unless (-d $outputdir){ mkdir ($outputdir) or die "could not create dir for $outputdir: $!\n"; } # Read the master list and populate our array. open (MASTERFILE, "<", $master_list) or die "Could not open $master_list for reading: $!\n"; my @master_clients = <MASTERFILE>; close MASTERFILE; ############################## #print "master list starts below:\n"; #foreach (@master_clients){print "$_\n";}exit; ###################################### my (%inputclient,$list); # Read the other files and compare the content to the master client list. foreach $list (@compare_lists){ # Output file name set of element curerently processed. # Open file to read from. open(INPUTFH, "<", $list) or die "Could not open $list for reading: $!\n"; # Could not open file for reading. File or directory does exist. while (<INPUTFH>){ chomp; $inputclient{"s_"} = $_; } close INPUTFH; #$outputfile = "NOT_IN" . "$outputfile"; my $outputfile = $list; my (@missing_clients, %outputclient); open (OUTPUTFILE, ">", $outputfile) || die "Could not open $outputfile: $!\n"; foreach my $aditem (@master_clients){ push (@missing_clients, $aditem) unless exists $inputclient{"$aditem"}; } On 29/05/2008, Mimi Cafe <[EMAIL PROTECTED]> wrote: > > > I am on Windows so it should not be case-sensitive. The script and all >> required files in one folder. I pass 3 arguments to the script (script.pl >> file1 file2 file3)and I can open the first file stored in $ARGV[0] as seen >> below: >> >> my $ad_clients = shift @ARGV; >> >> open (ADFILE, "<", $ad_clients) or die "Could not open $ad_clients for >> reading: $! \n"; # This works fine! >> my @ad_clients = <ADFILE>; >> close ADFILE; >> >> my %inputclient; >> >> foreach my $supplied (@ARGV){ >> open (INPUTFILE, "<", $supplied) or die "Could not open $supplied for >> reading: $!\n # This does not works! Error: No such file or directory >> > Mimi > >> >> >> >> >> On 29/05/2008, Ken Foskey <[EMAIL PROTECTED]> wrote: >>> >>> On Thu, 2008-05-29 at 11:45 +0100, Mimi Cafe wrote: >>> >>> my script is in the same directory as my files, but it cannot find the file >>> ABC.txt in open() below. >>> >>> foreach my $supplied (@ARGV){ >>> # Output file name set of element currently processed. >>> >>> # Open file to read from. >>> open (INPUTFILE, "<", "$supplied") or die "Could not open $supplied: $!\n"; >>> # Error: No such file or directory. >>> } >>> >>> Any help >>> >>> Mimi >>> >>> >>> >>> for starters you might want to look at the <> operator: >>> >>> while( <> ) { >>> } >>> >>> Will read each file on the command line in sequence, saves you thinking >>> about it. >>> >>> If it is Unix it is case sensitive, is this your problem? >>> >>> Are you actually in the directory? `bin/myscript.pl bin/ABC.txt` >>> >>> >>> >> >> >