in reply to Re^5: Find images regardless of filetype extension.
in thread Find images regardless of filetype extension.

When I was writing this, I started off just looking for files in the current directory. So,  my @files = map { "$dir/$_" } grep { !/^\.{1,2}$/ && -f "$dir/$_" } was nice and compact and seemed very perlish.

I then decided to allow directory traversal and kept the same code format. Still nice and compact, only 3 lines compared to 10 in your method. Of course, mine is obviously way less efficient.

I can't think of a way to eliminate the extra grep and stat and keep the same compactness.

Thanks for you suggestion.

zzSPECTREz

please read my disclaimer

Replies are listed 'Best First'.
Re^7: Find images regardless of filetype extension.
by Chady (Priest) on Aug 01, 2005 at 20:09 UTC

    Compactness affects readability. And besides, you're counting declarations and braces as lines, if I put it on one line it doesn't mean it's a single statement... if you're looking for compactness, here goes:

    I'll assume @files and @dirs are already declared then.
    map {$d="$dir/$_";$r= -d $d?\@dirs:\@files;push @$r,$d;} grep {!/^\./} + readdir DIR;

    Yes, this uses map in void context, but you want compactness, not efficiency :)


    He who asks will be a fool for five minutes, but he who doesn't ask will remain a fool for life.
    Chady | http://chady.net/
    Are you a Linux user in Lebanon? join the Lebanese GNU/Linux User Group.

      Ill give you that is compact!

      But I think, that

      • my @files = map { "$dir/$_" } grep { !/^\.{1,2}\z/ && -f "$dir/$_" } @tmp;
      is both compact but very clear and readable. On the otherhand,
      • map {$d="$dir/$_";$r= -d $d?\@dirs:\@files;push @$r,$d;} grep {!/^\./} readdir DIR;
      is compact and clever but not easily readable IMHO.

      On the other hand, I really like your use of the ternary and references. I would not have thought of using it like that. ++ ++ I think that is quite clever. Thanks for the snippet of code.

      Only one complaint, the way you wrote you regex it will skip any dot file. So .my-file would not be picked up.

      zzSPECTREz