Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

petdance (2468)

AOL IM: petdance (Add Buddy, Send Message)
Yahoo! ID: petdance (Add User, Send Message)

I'm Andy Lester, and I like to test stuff. I also write for the Perl Journal, and do tech edits on books. Sometimes I write code, too.

Journal of petdance (2468)

Friday August 06, 2004
12:13 AM

File::Find::Wanted released

[ #20265 ]
I just released File::Find::Wanted 0.01.

File::Find is a great module, except that it doesn't actually find anything. Its find() function walks a directory tree and calls a callback function. Unfortunately, the callback function is deceptively called wanted, which implies that it should return a boolean saying whether you want the file. That's not how it works.

Most of the time you call find(), you just want to build a list of files. There are other modules that do this for you, most notably Richard Clamp's great File::Find::Rule, but in many cases, it's overkill, and you need to learn a new syntax.

With the find_wanted function, you supply a callback sub and a list of starting directories, but the sub actually should return a boolean saying whether you want the file in your list or not.

To get a list of all files ending in .jpg:

my @files = find_wanted( sub { -f && /\.jpg$/ }, $dir );

It's easy, direct, and simple.

The cynical may say "that's just the same as doing this":

my @files;
find( sub { push @files, $File::Find::name if -f && /\.jpg$/ }, $dir );

Sure it is, but File::Find::Wanted makes it more obvious, and saves a line of code. That's worth it to me. I'd like it if find_wanted()made its way into the File::Find distro, but for now, this will do.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.