in reply to 'unlink' seems to not work correctly ...
You have a precedence problem with the unlink. Since unlink is a list operator and not a unamed unary operator, the statement
( -l && !-e && unlink "$File::Find::name" || croak "Warning: couldn't unlink $File::Find::name:$OS_ERROR\n" +) unless $param{test};
actually binds as
( -l && !-e && unlink ("$File::Find::name" || croak "Warning: couldn't unlink $File::Find::name:$OS_ERROR\n") + ) unless $param{test};
which is certainly not as you intended. I suggest you add explicit parentheses to the unlink. You could also change the "||" to "or" but parentheses are always clearer. Like this:
( -l && !-e && unlink("$File::Find::name") || croak "Warning: couldn't unlink $File::Find::name:$OS_ERROR\n" +) unless $param{test};
|
|---|