Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: permission error

by toolic (Bishop)
on Mar 01, 2010 at 20:05 UTC ( [id://825996]=note: print w/replies, xml ) Need Help??


in reply to permission error

could you please tell me why I am getting the error below?
readdir returns a list of all directory entries (files, sub-directories, links, etc.), including the current directory, which has the special name '.', and the parent directory, which has the special name '..'.

The 1st open in your while loop tries to open the directory named '.'.

I believe you only want to open files. To do so, use the -f filetest like this:

use strict; use warnings; my $dir = "C:/move/output/test/"; opendir DIR, $dir or die "Unable to open $dir: $!"; while (my $filename=readdir DIR) { my $file = "$dir/$filename"; next unless -f $file; open my $fh, '<', $file or die "Unable to open $file: $!";
Note that I had to prepend the directory name to the filename.

Replies are listed 'Best First'.
Re^2: permission error
by zzgulu (Novice) on Mar 01, 2010 at 21:26 UTC
    Thank you toolic for your great help although I need to read more about "unless". I am not sure I understand it totally. I tested the script and for some reason it only reads the first text files in the directory (they are all text files). How I can generate a text files in the output for every text files that it reads in?
    #!/usr/bin/perl use strict; use warnings; my $dir="C:/move/output/test"; opendir DIR, $dir or die "Unable to open $dir: $!"; while (my $filename=readdir DIR) { my $file="$dir/$filename"; next unless -f $file; open my $fh, '<', $file or die "Unable to open $filename: $!"; open OUT,">C:/move/output/test/out.txt"; select OUT; my (variables); { my loop} close $fh; }

      The code you posted will open every file that exists and passes the -f (entry is plain file) file test.

      Unfortunately, it will also open the same output file on each pass of the while loop -- with write permission (not append). Ie, every pass through the loop creates a completely new c:/move/output/test/out.txt file. I suspect this is the reason you believe you are only finding a single file.

      To append to the file on each pass, change your open command from open OUT,">C:/move/output/test/out.txt"; to open OUT,">>C:/move/output/test/out.txt"; You should also consider checking the return value of open.

        Thank You!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://825996]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2026-01-21 22:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What's your view on AI coding assistants?





    Results (125 votes). Check out past polls.

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.