backscratcher

 

ftw_pm

Page history last edited by tbarron 1 yr ago

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.