in reply to Return values, Closure Vars from File::Find &wanted subs?
Increase the scope of @dirlist:
use File::Find; my @dirlist; sub wanted { return unless -d $_; push(@dirlist, $File::Find::name); } find(\&wanted, shift(@ARGV)); # Use @dirlist here
Closures come in useful if you'd wish to avoid using a global:
use File::Find; sub find_dirs { my @dirlist; find(sub { return unless -d $_; push(@dirlist, $File::Find::name); }, @_); return @dirlist; } { # Not a global. my @dirlist = find_dirs(shift(@ARGV)); # Use @dirlist here }
Yet another way. This one uses dynamically scoped variables:
use File::Find; sub wanted { return unless -d $_; push(@File::Find::matches, $File::Find::name); } sub find_it { local *File::Find::matches; find(@_); return @File::Find::matches; } { # Not a global. my @dirlist = find_it(\&wanted, shift(@ARGV)); # Use @dirlist here }
Update: Added 2nd snippet.
Update: Added 3rd snippet.
|
|---|