12 # can't say 'opendir my $dh, $dirname'
13 # need to initialise $dh
19 use vars qw($VERSION @ISA @EXPORT);
22 @EXPORT = qw(mkpath rmtree);
24 my $Is_VMS = $^O eq 'VMS';
25 my $Is_MacOS = $^O eq 'MacOS';
27 # These OSes complain if you want to remove a file that you have no
28 # write permission to:
29 my $Force_Writeable = grep {$^O eq $_} qw(amigaos dos epoc MSWin32 MacOS os2);
47 $object = '' unless defined $object;
48 push @{${$arg->{error}}}, {$object => "$message: $!"};
51 _carp(defined($object) ? "$message for $object: $!" : "$message: $!");
57 UNIVERSAL::isa($_[0],'ARRAY')
58 or (@_ == 2 and (defined $_[1] ? $_[1] =~ /\A\d+\z/ : 1))
60 and (defined $_[1] ? $_[1] =~ /\A\d+\z/ : 1)
61 and (defined $_[2] ? $_[2] =~ /\A\d+\z/ : 1)
70 ($paths, $verbose, $mode) = @_;
71 $paths = [$paths] unless UNIVERSAL::isa($paths,'ARRAY');
72 $arg->{verbose} = defined $verbose ? $verbose : 0;
73 $arg->{mode} = defined $mode ? $mode : 0777;
76 if (@_ > 0 and UNIVERSAL::isa($_[-1], 'HASH')) {
78 exists $arg->{mask} and $arg->{mode} = delete $arg->{mask};
79 $arg->{mode} = 0777 unless exists $arg->{mode};
80 ${$arg->{error}} = [] if exists $arg->{error};
83 @{$arg}{qw(verbose mode)} = (0, 0777);
87 return _mkpath($arg, $paths);
94 local($")=$Is_MacOS ? ":" : "/";
96 foreach $path (@$paths) {
97 next unless length($path);
98 $path .= '/' if $^O eq 'os2' and $path =~ /^\w:\z/s; # feature of CRT
99 # Logic wants Unix paths, so go with the flow.
101 next if $path eq '/';
102 $path = VMS::Filespec::unixify($path);
105 my $parent = File::Basename::dirname($path);
106 unless (-d $parent or $path eq $parent) {
107 push(@created,_mkpath($arg, [$parent]));
109 print "mkdir $path\n" if $arg->{verbose};
110 if (mkdir($path,$arg->{mode})) {
111 push(@created, $path);
115 my ($e, $e1) = ($save_bang, $^E);
116 $e .= "; $e1" if $e ne $e1;
117 # allow for another process to have created it meanwhile
121 push @{${$arg->{error}}}, {$path => $e};
124 _croak("mkdir $path: $e");
134 UNIVERSAL::isa($_[0],'ARRAY')
135 or (@_ == 2 and (defined $_[1] ? $_[1] =~ /\A\d+\z/ : 1))
137 and (defined $_[1] ? $_[1] =~ /\A\d+\z/ : 1)
138 and (defined $_[2] ? $_[2] =~ /\A\d+\z/ : 1)
146 my ($verbose, $safe);
147 ($paths, $verbose, $safe) = @_;
148 $arg->{verbose} = defined $verbose ? $verbose : 0;
149 $arg->{safe} = defined $safe ? $safe : 0;
151 if (defined($paths) and length($paths)) {
152 $paths = [$paths] unless UNIVERSAL::isa($paths,'ARRAY');
155 _carp ("No root path(s) specified\n");
160 if (@_ > 0 and UNIVERSAL::isa($_[-1],'HASH')) {
162 ${$arg->{error}} = [] if exists $arg->{error};
163 ${$arg->{result}} = [] if exists $arg->{result};
166 @{$arg}{qw(verbose safe)} = (0, 0);
174 $arg->{cwd} = getcwd() or do {
175 _error($arg, "cannot fetch initial working directory");
178 for ($arg->{cwd}) { /\A(.*)\Z/; $_ = $1 } # untaint
180 @{$arg}{qw(device inode)} = (stat $arg->{cwd})[0,1] or do {
181 _error($arg, "cannot stat initial working directory", $arg->{cwd});
185 return _rmtree($arg, $paths);
193 my $curdir = File::Spec->curdir();
194 my $updir = File::Spec->updir();
198 foreach $root (@$paths) {
200 $root = ":$root" unless $root =~ /:/;
201 $root .= ":" unless $root =~ /:\z/;
207 # since we chdir into each directory, it may not be obvious
208 # to figure out where we are if we generate a message about
209 # a file name. We therefore construct a semi-canonical
210 # filename, anchored from the directory being unlinked (as
211 # opposed to being truly canonical, anchored from the root (/).
213 my $canon = $arg->{prefix}
214 ? File::Spec->catfile($arg->{prefix}, $root)
218 my ($ldev, $lino, $perm) = (lstat $root)[0,1,2] or next ROOT_DIR;
221 $root = VMS::Filespec::pathify($root) if $Is_VMS;
223 # see if we can escalate privileges to get in
224 # (e.g. funny protection mask such as -w- instead of rwx)
226 my $nperm = $perm | 0700;
227 if (!($arg->{safe} or $nperm == $perm or chmod($nperm, $root))) {
228 _error($arg, "cannot make child directory read-write-exec", $canon);
231 elsif (!chdir($root)) {
232 _error($arg, "cannot chdir to child", $canon);
237 my ($device, $inode, $perm) = (stat $curdir)[0,1,2] or do {
238 _error($arg, "cannot stat current working directory", $canon);
242 ($ldev eq $device and $lino eq $inode)
243 or _croak("directory $canon changed before chdir, expected dev=$ldev inode=$lino, actual dev=$device ino=$inode, aborting.");
245 $perm &= 07777; # don't forget setuid, setgid, sticky bits
246 my $nperm = $perm | 0700;
248 # notabene: 0700 is for making readable in the first place,
249 # it's also intended to change it to writable in case we have
250 # to recurse in which case we are better than rm -rf for
251 # subtrees with strange permissions
253 if (!($arg->{safe} or $nperm == $perm or chmod($nperm, $curdir))) {
254 _error($arg, "cannot make directory read+writeable", $canon);
259 $d = gensym() if $] < 5.006;
260 if (!opendir $d, $curdir) {
261 _error($arg, "cannot opendir", $canon);
266 if (!defined ${"\cTAINT"} or ${"\cTAINT"}) {
267 # Blindly untaint dir names if taint mode is
268 # active, or any perl < 5.006
269 @files = map { /\A(.*)\z/s; $1 } readdir $d;
278 # Deleting large numbers of files from VMS Files-11
279 # filesystems is faster if done in reverse ASCIIbetical order.
280 # include '.' to '.;' from blead patch #31775
281 @files = map {$_ eq '.' ? '.;' : $_} reverse @files;
282 ($root = VMS::Filespec::unixify($root)) =~ s/\.dir\z//;
284 @files = grep {$_ ne $updir and $_ ne $curdir} @files;
287 # remove the contained files before the directory itself
289 @{$narg}{qw(device inode cwd prefix depth)}
290 = ($device, $inode, $updir, $canon, $arg->{depth}+1);
291 $count += _rmtree($narg, \@files);
294 # restore directory permissions of required now (in case the rmdir
295 # below fails), while we are still in the directory and may do so
296 # without a race via '.'
297 if ($nperm != $perm and not chmod($perm, $curdir)) {
298 _error($arg, "cannot reset chmod", $canon);
301 # don't leave the client code in an unexpected directory
303 or _croak("cannot chdir to $arg->{cwd} from $canon: $!, aborting.");
305 # ensure that a chdir upwards didn't take us somewhere other
306 # than we expected (see CVE-2002-0435)
307 ($device, $inode) = (stat $curdir)[0,1]
308 or _croak("cannot stat prior working directory $arg->{cwd}: $!, aborting.");
310 ($arg->{device} eq $device and $arg->{inode} eq $inode)
311 or _croak("previous directory $arg->{cwd} changed before entering $canon, expected dev=$ldev inode=$lino, actual dev=$device ino=$inode, aborting.");
313 if ($arg->{depth} or !$arg->{keep_root}) {
315 ($Is_VMS ? !&VMS::Filespec::candelete($root) : !-w $root)) {
316 print "skipped $root\n" if $arg->{verbose};
319 if (!chmod $perm | 0700, $root) {
320 if ($Force_Writeable) {
321 _error($arg, "cannot make directory writeable", $canon);
324 print "rmdir $root\n" if $arg->{verbose};
326 push @{${$arg->{result}}}, $root if $arg->{result};
330 _error($arg, "cannot remove directory", $canon);
331 if (!chmod($perm, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
333 _error($arg, sprintf("cannot restore permissions to 0%o",$perm), $canon);
340 $root = VMS::Filespec::vmsify("./$root")
342 && !File::Spec->file_name_is_absolute($root)
343 && ($root !~ m/(?<!\^)[\]>]+/); # not already in VMS syntax
346 ($Is_VMS ? !&VMS::Filespec::candelete($root)
347 : !(-l $root || -w $root)))
349 print "skipped $root\n" if $arg->{verbose};
353 my $nperm = $perm & 07777 | 0600;
354 if ($nperm != $perm and not chmod $nperm, $root) {
355 if ($Force_Writeable) {
356 _error($arg, "cannot make file writeable", $canon);
359 print "unlink $canon\n" if $arg->{verbose};
360 # delete all versions under VMS
363 push @{${$arg->{result}}}, $root if $arg->{result};
366 _error($arg, "cannot unlink file", $canon);
367 $Force_Writeable and chmod($perm, $root) or
368 _error($arg, sprintf("cannot restore permissions to 0%o",$perm), $canon);
372 last unless $Is_VMS && lstat $root;
385 File::Path - Create or remove directory trees
389 This document describes version 2.04 of File::Path, released
397 mkpath( 'foo/bar/baz', '/zug/zwang', {verbose => 1} );
400 'foo/bar/baz', '/zug/zwang',
401 { verbose => 1, error => \my $err_list }
405 mkpath(['/foo/bar/baz', 'blurfl/quux'], 1, 0711);
406 rmtree(['foo/bar/baz', 'blurfl/quux'], 1, 1);
410 The C<mkpath> function provides a convenient way to create directories
411 of arbitrary depth. Similarly, the C<rmtree> function provides a
412 convenient way to delete an entire directory subtree from the
413 filesystem, much like the Unix command C<rm -r>.
415 Both functions may be called in one of two ways, the traditional,
416 compatible with code written since the dawn of time, and modern,
417 that offers a more flexible and readable idiom. New code should use
418 the modern interface.
422 The modern way of calling C<mkpath> and C<rmtree> is with a list
423 of directories to create, or remove, respectively, followed by an
424 optional hash reference containing keys to control the
425 function's behaviour.
429 The following keys are recognised as parameters to C<mkpath>.
430 The function returns the list of files actually created during the
433 my @created = mkpath(
434 qw(/tmp /flub /home/nobody),
435 {verbose => 1, mode => 0750},
437 print "created $_\n" for @created;
443 The numeric permissions mode to apply to each created directory
444 (defaults to 0777), to be modified by the current C<umask>. If the
445 directory already exists (and thus does not need to be created),
446 the permissions will not be modified.
448 C<mask> is recognised as an alias for this parameter.
452 If present, will cause C<mkpath> to print the name of each directory
453 as it is created. By default nothing is printed.
457 If present, will be interpreted as a reference to a list, and will
458 be used to store any errors that are encountered. See the ERROR
459 HANDLING section for more information.
461 If this parameter is not used, certain error conditions may raise
462 a fatal error that will cause the program will halt, unless trapped
473 If present, will cause C<rmtree> to print the name of each file as
474 it is unlinked. By default nothing is printed.
478 When set to a true value, will cause C<rmtree> to skip the files
479 for which the process lacks the required privileges needed to delete
480 files, such as delete privileges on VMS. In other words, the code
481 will make no attempt to alter file permissions. Thus, if the process
482 is interrupted, no filesystem object will be left in a more
487 When set to a true value, will cause all files and subdirectories
488 to be removed, except the initially specified directories. This comes
489 in handy when cleaning out an application's scratch directory.
491 rmtree( '/tmp', {keep_root => 1} );
495 If present, will be interpreted as a reference to a list, and will
496 be used to store the list of all files and directories unlinked
497 during the call. If nothing is unlinked, a reference to an empty
498 list is returned (rather than C<undef>).
500 rmtree( '/tmp', {result => \my $list} );
501 print "unlinked $_\n" for @$list;
503 This is a useful alternative to the C<verbose> key.
507 If present, will be interpreted as a reference to a list,
508 and will be used to store any errors that are encountered.
509 See the ERROR HANDLING section for more information.
511 Removing things is a much more dangerous proposition than
512 creating things. As such, there are certain conditions that
513 C<rmtree> may encounter that are so dangerous that the only
514 sane action left is to kill the program.
516 Use C<error> to trap all that is reasonable (problems with
517 permissions and the like), and let it die if things get out
518 of hand. This is the safest course of action.
522 =head2 TRADITIONAL INTERFACE
524 The old interfaces of C<mkpath> and C<rmtree> take a reference to
525 a list of directories (to create or remove), followed by a series
526 of positional, numeric, modal parameters that control their behaviour.
528 This design made it difficult to add additional functionality, as
529 well as posed the problem of what to do when the calling code only
530 needs to set the last parameter. Even though the code doesn't care
531 how the initial positional parameters are set, the programmer is
532 forced to learn what the defaults are, and specify them.
534 Worse, if it turns out in the future that it would make more sense
535 to change the default behaviour of the first parameter (for example,
536 to avoid a security vulnerability), all existing code will remain
537 hard-wired to the wrong defaults.
539 Finally, a series of numeric parameters are much less self-documenting
540 in terms of communicating to the reader what the code is doing. Named
541 parameters do not have this problem.
543 In the traditional API, C<mkpath> takes three arguments:
549 The name of the path to create, or a reference to a list of paths
554 a boolean value, which if TRUE will cause C<mkpath> to print the
555 name of each directory as it is created (defaults to FALSE), and
559 the numeric mode to use when creating the directories (defaults to
560 0777), to be modified by the current umask.
564 It returns a list of all directories (including intermediates, determined
565 using the Unix '/' separator) created. In scalar context it returns
566 the number of directories created.
568 If a system error prevents a directory from being created, then the
569 C<mkpath> function throws a fatal error with C<Carp::croak>. This error
570 can be trapped with an C<eval> block:
572 eval { mkpath($dir) };
574 print "Couldn't create $dir: $@";
577 In the traditional API, C<rmtree> takes three arguments:
583 the root of the subtree to delete, or a reference to a list of
584 roots. All of the files and directories below each root, as well
585 as the roots themselves, will be deleted. If you want to keep
586 the roots themselves, you must use the modern API.
590 a boolean value, which if TRUE will cause C<rmtree> to print a
591 message each time it examines a file, giving the name of the file,
592 and indicating whether it's using C<rmdir> or C<unlink> to remove
593 it, or that it's skipping it. (defaults to FALSE)
597 a boolean value, which if TRUE will cause C<rmtree> to skip any
598 files to which you do not have delete access (if running under VMS)
599 or write access (if running under another OS). This will change
600 in the future when a criterion for 'delete permission' under OSs
601 other than VMS is settled. (defaults to FALSE)
605 It returns the number of files, directories and symlinks successfully
606 deleted. Symlinks are simply deleted and not followed.
608 Note also that the occurrence of errors in C<rmtree> using the
609 traditional interface can be determined I<only> by trapping diagnostic
610 messages using C<$SIG{__WARN__}>; it is not apparent from the return
611 value. (The modern interface may use the C<error> parameter to
612 record any problems encountered).
614 =head2 ERROR HANDLING
616 If C<mkpath> or C<rmtree> encounter an error, a diagnostic message
617 will be printed to C<STDERR> via C<carp> (for non-fatal errors),
618 or via C<croak> (for fatal errors).
620 If this behaviour is not desirable, the C<error> attribute may be
621 used to hold a reference to a variable, which will be used to store
622 the diagnostics. The result is a reference to a list of hash
623 references. For each hash reference, the key is the name of the
624 file, and the value is the error message (usually the contents of
625 C<$!>). An example usage looks like:
627 rmpath( 'foo/bar', 'bar/rat', {error => \my $err} );
628 for my $diag (@$err) {
629 my ($file, $message) = each %$diag;
630 print "problem unlinking $file: $message\n";
633 If no errors are encountered, C<$err> will point to an empty list
634 (thus there is no need to test for C<undef>). If a general error
635 is encountered (for instance, C<rmtree> attempts to remove a directory
636 tree that does not exist), the diagnostic key will be empty, only
637 the value will be set:
639 rmpath( '/no/such/path', {error => \my $err} );
640 for my $diag (@$err) {
641 my ($file, $message) = each %$diag;
643 print "general error: $message\n";
649 C<File::Path> blindly exports C<mkpath> and C<rmtree> into the
650 current namespace. These days, this is considered bad style, but
651 to change it now would break too much code. Nonetheless, you are
652 invited to specify what it is you are expecting to use:
654 use File::Path 'rmtree';
658 The functions detect (as far as possible) which way they are being
659 called and will act appropriately. It is important to remember that
660 the heuristic for detecting the old style is either the presence
661 of an array reference, or two or three parameters total and second
662 and third parameters are numeric. Hence...
664 mkpath 486, 487, 488;
666 ... will not assume the modern style and create three directories, rather
667 it will create one directory verbosely, setting the permission to
668 0750 (488 being the decimal equivalent of octal 750). Here, old
669 style trumps new. It must, for backwards compatibility reasons.
671 If you want to ensure there is absolutely no ambiguity about which
672 way the function will behave, make sure the first parameter is a
673 reference to a one-element list, to force the old style interpretation:
675 mkpath [486], 487, 488;
677 and get only one directory created. Or add a reference to an empty
678 parameter hash, to force the new style:
680 mkpath 486, 487, 488, {};
682 ... and hence create the three directories. If the empty hash
683 reference seems a little strange to your eyes, or you suspect a
684 subsequent programmer might I<helpfully> optimise it away, you
685 can add a parameter set to a default value:
687 mkpath 486, 487, 488, {verbose => 0};
689 =head3 SECURITY CONSIDERATIONS
691 There were race conditions 1.x implementations of File::Path's
692 C<rmtree> function (although sometimes patched depending on the OS
693 distribution or platform). The 2.0 version contains code to avoid the
694 problem mentioned in CVE-2002-0435.
696 See the following pages for more information:
698 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=286905
699 http://www.nntp.perl.org/group/perl.perl5.porters/2005/01/msg97623.html
700 http://www.debian.org/security/2005/dsa-696
702 Additionally, unless the C<safe> parameter is set (or the
703 third parameter in the traditional interface is TRUE), should a
704 C<rmtree> be interrupted, files that were originally in read-only
705 mode may now have their permissions set to a read-write (or "delete
710 FATAL errors will cause the program to halt (C<croak>), since the
711 problem is so severe that it would be dangerous to continue. (This
712 can always be trapped with C<eval>, but it's not a good idea. Under
713 the circumstances, dying is the best thing to do).
715 SEVERE errors may be trapped using the modern interface. If the
716 they are not trapped, or the old interface is used, such an error
717 will cause the program will halt.
719 All other errors may be trapped using the modern interface, otherwise
720 they will be C<carp>ed about. Program execution will not be halted.
724 =item mkdir [path]: [errmsg] (SEVERE)
726 C<mkpath> was unable to create the path. Probably some sort of
727 permissions error at the point of departure, or insufficient resources
728 (such as free inodes on Unix).
730 =item No root path(s) specified
732 C<mkpath> was not given any paths to create. This message is only
733 emitted if the routine is called with the traditional interface.
734 The modern interface will remain silent if given nothing to do.
736 =item No such file or directory
738 On Windows, if C<mkpath> gives you this warning, it may mean that
739 you have exceeded your filesystem's maximum path length.
741 =item cannot fetch initial working directory: [errmsg]
743 C<rmtree> attempted to determine the initial directory by calling
744 C<Cwd::getcwd>, but the call failed for some reason. No attempt
745 will be made to delete anything.
747 =item cannot stat initial working directory: [errmsg]
749 C<rmtree> attempted to stat the initial directory (after having
750 successfully obtained its name via C<getcwd>), however, the call
751 failed for some reason. No attempt will be made to delete anything.
753 =item cannot chdir to [dir]: [errmsg]
755 C<rmtree> attempted to set the working directory in order to
756 begin deleting the objects therein, but was unsuccessful. This is
757 usually a permissions issue. The routine will continue to delete
758 other things, but this directory will be left intact.
760 =item directory [dir] changed before chdir, expected dev=[n] inode=[n], actual dev=[n] ino=[n], aborting. (FATAL)
762 C<rmtree> recorded the device and inode of a directory, and then
763 moved into it. It then performed a C<stat> on the current directory
764 and detected that the device and inode were no longer the same. As
765 this is at the heart of the race condition problem, the program
766 will die at this point.
768 =item cannot make directory [dir] read+writeable: [errmsg]
770 C<rmtree> attempted to change the permissions on the current directory
771 to ensure that subsequent unlinkings would not run into problems,
772 but was unable to do so. The permissions remain as they were, and
773 the program will carry on, doing the best it can.
775 =item cannot read [dir]: [errmsg]
777 C<rmtree> tried to read the contents of the directory in order
778 to acquire the names of the directory entries to be unlinked, but
779 was unsuccessful. This is usually a permissions issue. The
780 program will continue, but the files in this directory will remain
783 =item cannot reset chmod [dir]: [errmsg]
785 C<rmtree>, after having deleted everything in a directory, attempted
786 to restore its permissions to the original state but failed. The
787 directory may wind up being left behind.
789 =item cannot chdir to [parent-dir] from [child-dir]: [errmsg], aborting. (FATAL)
791 C<rmtree>, after having deleted everything and restored the permissions
792 of a directory, was unable to chdir back to the parent. This is usually
793 a sign that something evil this way comes.
795 =item cannot stat prior working directory [dir]: [errmsg], aborting. (FATAL)
797 C<rmtree> was unable to stat the parent directory after have returned
798 from the child. Since there is no way of knowing if we returned to
799 where we think we should be (by comparing device and inode) the only
800 way out is to C<croak>.
802 =item previous directory [parent-dir] changed before entering [child-dir], expected dev=[n] inode=[n], actual dev=[n] ino=[n], aborting. (FATAL)
804 When C<rmtree> returned from deleting files in a child directory, a
805 check revealed that the parent directory it returned to wasn't the one
806 it started out from. This is considered a sign of malicious activity.
808 =item cannot make directory [dir] writeable: [errmsg]
810 Just before removing a directory (after having successfully removed
811 everything it contained), C<rmtree> attempted to set the permissions
812 on the directory to ensure it could be removed and failed. Program
813 execution continues, but the directory may possibly not be deleted.
815 =item cannot remove directory [dir]: [errmsg]
817 C<rmtree> attempted to remove a directory, but failed. This may because
818 some objects that were unable to be removed remain in the directory, or
819 a permissions issue. The directory will be left behind.
821 =item cannot restore permissions of [dir] to [0nnn]: [errmsg]
823 After having failed to remove a directory, C<rmtree> was unable to
824 restore its permissions from a permissive state back to a possibly
825 more restrictive setting. (Permissions given in octal).
827 =item cannot make file [file] writeable: [errmsg]
829 C<rmtree> attempted to force the permissions of a file to ensure it
830 could be deleted, but failed to do so. It will, however, still attempt
833 =item cannot unlink file [file]: [errmsg]
835 C<rmtree> failed to remove a file. Probably a permissions issue.
837 =item cannot restore permissions of [file] to [0nnn]: [errmsg]
839 After having failed to remove a file, C<rmtree> was also unable
840 to restore the permissions on the file to a possibly less permissive
841 setting. (Permissions given in octal).
853 Allows files and directories to be moved to the Trashcan/Recycle
854 Bin (where they may later be restored if necessary) if the operating
855 system supports such functionality. This feature may one day be
856 made available directly in C<File::Path>.
862 When removing directory trees, if you want to examine each file to
863 decide whether to delete it (and possibly leaving large swathes
864 alone), F<File::Find::Rule> offers a convenient and flexible approach
865 to examining directory trees.
871 Please report all bugs on the RT queue:
873 L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=File-Path>
875 =head1 ACKNOWLEDGEMENTS
877 Paul Szabo identified the race condition originally, and Brendan
878 O'Dea wrote an implementation for Debian that addressed the problem.
879 That code was used as a basis for the current code. Their efforts
880 are greatly appreciated.
884 Tim Bunce <F<Tim.Bunce@ig.co.uk>> and Charles Bailey
885 <F<bailey@newman.upenn.edu>>. Currently maintained by David Landgren
886 <F<david@landgren.net>>.
890 This module is copyright (C) Charles Bailey, Tim Bunce and
891 David Landgren 1995-2007. All rights reserved.
895 This library is free software; you can redistribute it and/or modify
896 it under the same terms as Perl itself.