develooper Front page | perl.perl5.porters | Postings from March 2006

Re: [perl #38790] readdir() only returns one result when used

Thread Previous | Thread Next
Rafael Garcia-Suarez
March 23, 2006 05:04
Re: [perl #38790] readdir() only returns one result when used
Message ID:
Tom Hukins (via RT) wrote:
> and readdir() do not play well together.  Run the following
> script in a directory containing several files.  It only prints out '.'.
> Then comment out the 'use Fatal' line and run the script again.  It now
> prints out all the files in the directory.
> #!/usr/bin/perl
> use strict;
> use warnings;
> use Fatal qw(readdir);
> my $start_dir = '.';
> opendir(my $dir, $start_dir);
> my @subdir = readdir $dir;
> closedir $dir;
> print "@subdir\n";

Fatal will replace readdir() by this function :

    sub (*) {
	    local($", $!) = (', ', 0);
	    CORE::readdir($_[0]) || croak "Can't readdir(@_): $!";

As you see, this construct forces readdir to be called in scalar
context; which is why it returns only one element, as documented
in perlfunc.

We could add a wantarray() before that, but that would alter the proper
behaviour of other weird code like this :

    use Fatal qw(open);
    my @useless_array = open my $fh, "non-existent-file";

Other ideas ?

No matter what scheme is chosen, most of the world is unhappy.
    -- Jeff Johnson in rpm-devel

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About