On Fri, 2008-05-30 at 13:04 +0100, Mimi Cafe wrote: > 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
Are you missing a "file_name" in that command template? Does this work when you hard code the filenames? When you use full pathnames or fully qualified relative paths? Does this work with only a single compare option? > ################################ > #foreach (@compare_lists){print "$_\n";} # This prints the CLI arguments > correctly. > ################################# You may want to use a more visible delimiter to ensure that there's no whitespace issues. > > 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` > >>> > >>> > >>> > >> > >> > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/