ExtUtils/Command.pm (among other things) expects to be able to destroy
a strangely-permissioned testdir.  This is a backport of the chdir/chmod
work performed in File::Path released in Perl 5.10.0.

--- perl-5.8.7.orig/lib/File/Path.pm	2008-12-05 13:23:32.000000000 -0800
+++ perl-5.8.7/lib/File/Path.pm	2008-12-05 13:33:13.000000000 -0800
@@ -162,7 +162,7 @@
 {
     my ($path, $prefix, $up, $up_dev, $up_ino, $verbose, $safe) = @_;
 
-    my ($dev, $ino) = lstat $path or return 0;
+    my ($dev, $ino, $perm) = lstat $path or return 0;
     unless (-d _)
     {
 	print "unlink $prefix$path\n" if $verbose;
@@ -175,15 +175,25 @@
 	return 1;
     }
 
-    unless (chdir $path)
-    {
+    if (!chdir($path)) {
+        # see if we can escalate privileges to get in
+        # (e.g. funny protection mask such as -w- instead of rwx)
+        $perm &= 07777;
+        my $nperm = $perm | 0700;
+        if (!($safe or $nperm == $perm or chmod($nperm, $path))) {
+            carp "cannot make $prefix$path read-write-exec";
+            return 0;
+        }
+        elsif (!chdir($path)) {
 	carp "Can't chdir to $prefix$path ($!)";
 	return 0;
+        }
     }
 
     # avoid a race condition where a directory may be replaced by a
     # symlink between the lstat and the chdir
-    my ($new_dev, $new_ino, $perm) = stat '.';
+    my ($new_dev, $new_ino);
+    ($new_dev, $new_ino, $perm) = stat '.';
     unless ("$new_dev:$new_ino" eq "$dev:$ino")
     {
 	croak "Directory $prefix$path changed before chdir, aborting";
--- perl-5.8.8.orig/lib/ExtUtils/t/Command.t
+++ perl-5.8.8/lib/ExtUtils/t/Command.t
@@ -23,7 +23,7 @@
 }
 
 BEGIN {
-    use Test::More tests => 38;
+    use Test::More tests => 39;
     use File::Spec;
 }
 
@@ -148,7 +148,7 @@
             $^O eq 'NetWare' || $^O eq 'dos' || $^O eq 'cygwin'  ||
             $^O eq 'MacOS'
            ) {
-            skip( "different file permission semantics on $^O", 4);
+            skip( "different file permission semantics on $^O", 5);
         }
 
         @ARGV = ('testdir');
@@ -178,6 +178,7 @@
 
         @ARGV = ('testdir');
         rm_rf;
+        ok( ! -e 'testdir', 'rm_rf can delete a read-only dir' );
     }
 
 
