in reply to Failed to open file for write

Your backslashes are being swallowed by interpolation.

If that means nothing to you; then try switching all the backslashes in your paths to forward slashes. Ie:

'D:/research/audit fee models/filings/filenames/filenames.txt'

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Failed to open file for write
by SimonPratt (Friar) on Apr 13, 2016 at 12:10 UTC

    Actually they aren't. Perl doesn't interpolate single quoted strings. The actual issue is that OP defined a file for output and is then trying to tack a filename onto the end of it and open it for writing, ie 'D:\research\audit fee models\filings\filenames\filenames.txt'.'/'.$filename

    No idea about Linux, but this doesn't work in a Windows world

Re^2: Failed to open file for write
by wrkrbeee (Scribe) on Apr 12, 2016 at 23:26 UTC
    No argument here, but never had this problem with backslashes before. Changed to forward slashes, but now get the following message: "my" variable $files_dir masks earlier declaration in same scope at line 14. Line 14 is: opendir (my $dir_handle, $files_dir); What is this telling me? Sorry for the novice questions.

      Based on your OP code; I cannot see a problem that would cause that error; but you have modified your code and that error message is a typical catchall report that is manifest when perl is confused by a typo.

      The fastest solution would be to post the modified code that is producing the error.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
      In the absence of evidence, opinion is indistinguishable from prejudice.
        I apologize, as taking way too much of your time. Please know that I appreciate your help! Updated code appears below.
        #! /usr/bin/perl -w use strict; use warnings; use lib "c:/strawberry/perl/site/lib"; use open ':std', ':encoding(UTF-8)'; #Specify location of input files; my $files_dir = 'D:/research/audit fee models/filings/test'; #Specify location of output results; my $write_dir = 'D:/research/audit fee models/filings/filenames/filena +mes.txt' #Open the directory containing the input files you will loop through; opendir (my $dir_handle, $files_dir); #Set up a loop for the sequentially reading the input files; while (my $filename = readdir($dir_handle)) { next unless -f $files_dir.'/'.$filename; print "Procesing $filename\n"; #Open the next file in the directory; open my $fh_in, '<', $files_dir.'/'.$filename or die "failed to open '$filename' for read"; #Initialize file counter; my $count=0; #Establish a loop to read the open file line by line; while (my $line = <$fh_in>) { #begin WHILE loop; print $line; #Open the output file for saving the results; open my $fh_out, '>', $write_dir.'/'.$filename or die "failed to open '$filename' for write"; print $fh_out "$line\n"; #write results to file; ++$count; #update line counter; } #end of while loop for current line; print "$count lines read from $filename\n;" } #end of current file loop;