http://www.perlmonks.org?node_id=1207197


in reply to Why can't I open a file for writing?

In addition to what other monks have already said, please note that glob "*" or <$dir/*> will return a list of files with their path. So, @files will contain things such as /some/directory/here/foo.txt. This is OK for reading the files in the foreach loop (and this is often what you want), but this:
$outputfile = $inputfile; open NEWFILE, '>', "$dir/subdirectory/$outputfile" or die "... $!" +;
will probably fail, or, at the very least, not work as expected, because the new file to be created will look like /some/directory/here/subdirectory/some/directory/here/foo.txt which is presumably not what you want. So you probably to extract the file name (without the path) before assigning outputfile or use some other means for creating the list of files.

Replies are listed 'Best First'.
Re^2: Why can't I open a file for writing?
by karlgoethebier (Abbot) on Jan 14, 2018 at 10:32 UTC

    BTW, you might also try

    use strict; use warnings, use autodie; open my $new_file, '>', qq($dir/subdirectory/$outputfile);

    ...instead of open NEWFILE, '>', "$dir/subdirectory/$outputfile" || die qq(Crap: $!)

    See also Why the Modern Perl Book Avoids Bareword Filehandles and autodie.

    Best regards, Karl

    «The Crux of the Biscuit is the Apostrophe»

    perl -MCrypt::CBC -E 'say Crypt::CBC->new(-key=>'kgb',-cipher=>"Blowfish")->decrypt_hex($ENV{KARL});'Help