in reply to Yea, though i walk through the shadow of File::Find & Directory Tree Deletion...

cygwin goes through a lot of hoops to delete open files when they close or when your process ends; don't know if this applies to directories also, but if so it would explain the difference.

Have you tried using the no_chdir option of File::Find?

  • Comment on Re: Yea, though i walk through the shadow of File::Find & Directory Tree Deletion...

Replies are listed 'Best First'.
Re^2: Yea, though i walk through the shadow of File::Find & Directory Tree Deletion...
by wufnik (Friar) on Jul 13, 2004 at 14:34 UTC
    THIS WORKS for activestate - thanks++ ysth. thanks also to the other monks that have responded.

    specifically, when i change the code to:
    use File::Find qw(find); use Cwd; *name = *File::Find::name; my @dirs = @ARGV; my @legitdirs = grep { -d } @dirs; find( { "wanted" => \&unlinkplus, "bydepth"=>1, "no_chdir"=>1 } , @leg +itdirs); # danger, danger. high voltage. use at own risk. sub unlinkplus { warn "current dir :" . cwd . "\n"; if (!-l && -d _) { # not a link, is a directory warn "rmdir attempt :" . $name . "\n"; (rmdir($_) && warn "ok..." ) or warn "cannot rmdir $name:" . " $!"; } else { warn "file unlink :" . $name . ">"; (unlink($_) && warn "ok..." ) or warn "can't unlink " . $name . "$!"; } }
    i get the behavior i require, ie removal of directories after the files in them have been removed, no problems. in summary: if you are using activestate perl for this kind of thing, ie directory removal, make sure you have the no_chdir option on.

    if you are sensible enough to use cygwin perl, you will have no problems here. both versions of the script will work.

    ps: re: tachyon's question (ie: rm -r) ; the restraining bolt fitted to prevent overtly sensible behavior is due to come off soon...

    ...wufnik

    -- in the world of the mules there are no rules --