in reply to Is this the most elegant way to code directory lookup?

Three things that I would change:

I wouldn't read the filenames into an array, I'd read them one at a time.

while ($_ = readdir(INDIR)) { ... }

I'd use next to skip the loop for '.' and '..'.

while ($_ = readdir(INDIR)) { next if -d || $_ eq '.' || $_ eq '..'; ... }

Finally (and most importantly) using backticks for commands where you're not capturing the output is wasteful as Perl collects up all the output and returns it to you - only for you to throw it away. Better to use system in that case. Or to use Perl version of the command where they are available - like using move (from File::Copy instead of mv).

Update: One more thing I've just noticed.

unless (-d $srcdir && -d $destdir ) {die "Error: $!";}

Not sure why you're including the value of $! in that error message. It won't contain a value at that point.

--
<http://dave.org.uk>

"The first rule of Perl club is you do not talk about Perl club."
-- Chip Salzenberg

Replies are listed 'Best First'.
Re^2: Is this the most elegant way to code directory lookup?
by johngg (Canon) on Sep 29, 2006 at 15:26 UTC
    Not sure why you're including the value of $! in that error message. It won't contain a value at that point.
    I thought that, too. I tested it, however, and

    $ perl -e '-e q{non-existent} or die $!;' No such file or directory at -e line 1. $

    Cheers,

    JohnGG

Backticks (Was: Re^2: Is this the most elegant way to code directory lookup?)
by LittleGreyCat (Scribe) on Oct 03, 2006 at 10:12 UTC
    "Finally (and most importantly) using backticks for commands where you're not capturing the output is wasteful as Perl collects up all the output and returns it to you - only for you to throw it away. Better to use system in that case. Or to use Perl version of the command where they are available - like using move (from File::Copy instead of mv)."

    Be thankful that Perl throws it away. If you do the same thing in (e.g.) ksh then the command for the shell to execute is evaluated as the return from the back-ticked command. i.e. it doesn't throw the output away it executes it!

    Now I can see how this might be useful in some obscure circumstances.....however I have seen back-ticks used without the realization of the implications :-(

    And yes, it did take me a while to work out where the obscure error messages were coming from!

    Cheers

    Dave.R

    Nothing succeeds like a budgie with no teeth.

    2006-10-03 Retitled by planetscape, as per Monastery guidelines: one-word (or module-only) titles hinder site navigation


    Original title: 'Re^2: Backticks'