ftw.pm
# ---------------------------------------------------------------------------
# $order eq "pre" -- descend dirs before processing contents of .
# $order eq "post" -- descend dirs after processing contents of .
# if $follow -> follow symlinks that point to dirs
#
sub file_tree_walk
{
my ($args, $order, $arglist, $function, @list, $dir);
($dir, $function, $arglist, $order, $follow) = @_;
$order = "post" if ($order eq "");
$follow = 0 if (!defined($follow));
@args = grep( s/(.*)/"1"/, @{$arglist});
file_tree_walk_r($dir, $function, @args, $order, $follow);
}
# ---------------------------------------------------------------------------
sub file_tree_walk_r
{
my ($follow, $args, $order, $arglist, $function, @list, $dir);
($dir, $function, $arglist, $order, $follow) = @_;
if (!opendir(DIR, $dir))
{
print("failure opening '$dir': $!n");
}
else
{
@list = grep(!/^..?$/, readdir(DIR));
closedir(DIR);
foreach $filename (@list)
{
@s = stat("$dir/$filename");
if ($order eq "pre")
{
if (((-l "$dir/$filename") && ($follow) && (-d "$dir/$filename"))
|| ((! -l "$dir/$filename") && (-d "$dir/$filename")))
{
file_tree_walk_r("$dir/$filename", $function, $arglist,
$order, $follow);
# file_tree_walk_r("$filename", $function, $arglist,
# $order, $follow);
}
}
$args = join(", ", @{ $arglist } );
$filename =~ s/@/\@/g;
eval("$function( "$dir/$filename", $args )");
if ($order eq "post")
{
if (((-l "$dir/$filename") && ($follow) && (-d "$dir/$filename"))
|| ((! -l "$dir/$filename") && (-d "$dir/$filename")))
{
file_tree_walk_r("$dir/$filename", $function, $arglist,
$order, $follow);
# file_tree_walk_r("$filename", $function, $arglist,
# $order, $follow);
}
}
}
}
}
1;
Comments (0)
You don't have permission to comment on this page.