Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

permission error

by zzgulu (Novice)
on Mar 01, 2010 at 19:24 UTC ( [id://825986]=perlquestion: print w/replies, xml ) Need Help??

zzgulu has asked for the wisdom of the Perl Monks concerning the following question:

Hi Guys, this should be pretty obvious but could you please tell me why I am getting the error below? I am including the first few lines of the code

"Unable to open .: Permission denied at C:\MOVE\output\test\script3.pl line 8."

#!/usr/bin/perl use strict; use warnings; opendir DIR,"C:/move/output/test/"; while (my $filename=readdir DIR) { open my $fh, $filename or die "Unable to open $filename: $!"; open OUT,">C:/move/output/test/out.txt"; select OUT;

Replies are listed 'Best First'.
Re: permission error
by toolic (Bishop) on Mar 01, 2010 at 20:05 UTC
    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.
      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.

Re: permission error
by jwkrahn (Abbot) on Mar 01, 2010 at 19:34 UTC

    Yes it is obvious if you read the documentation for readdir.

Re: permission error
by Anonymous Monk on Mar 01, 2010 at 19:47 UTC
    Hi,

    You are trying to open the . directory.
    You might like to ignore it and the .. entry.

    J.C.
      Thank you J.C. If you mean the "/" after test, then it was a typo. I am not sure what you mean by ignoring it

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (3)
As of 2026-01-14 07:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What's your view on AI coding assistants?





    Results (118 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.