Run many filetest checks on a tree
use File::CheckTree; $num_warnings = validate( q{ /vmunix -e || die /boot -e || die /bin cd csh -ex csh !-ug sh -ex sh !-ug /usr -d || warn "What happened to $file?\n" });
The validate() routine takes a single multiline string consisting of directives, each containing a filename plus a file test to try on it. (The file test may also be a \*(L"cd\*(R", causing subsequent relative filenames to be interpreted relative to that directory.) After the file test you may put \*(C`|| die\*(C' to make it a fatal error if the file test fails. The default is \*(C`|| warn\*(C'. The file test may optionally have a "!' prepended to test for the opposite condition. If you do a cd and then list some relative filenames, you may want to indent them slightly for readability. If you supply your own die() or warn() message, you can use $file to interpolate the filename.
Filetests may be bunched: \*(L"-rwx\*(R" tests for all of \*(C`-r\*(C', \*(C`-w\*(C', and \*(C`-x\*(C'. Only the first failed test of the bunch will produce a warning.
The routine returns the number of warnings issued.
File::CheckTree was derived from lib/validate.pl which was written by Larry Wall. Revised by Paul Grassie <[email protected]> in 2002.
File::CheckTree used to not display fatal error messages. It used to count only those warnings produced by a generic \*(C`|| warn\*(C' (and not those in which the user supplied the message). In addition, the validate() routine would leave the user program in whatever directory was last entered through the use of \*(L"cd\*(R" directives. These bugs were fixed during the development of perl 5.8. The first fixed version of File::CheckTree was 4.2.