Path::Class - Cross-platform path specification manipulation
use Path::Class; my $dir = dir('foo', 'bar'); # Path::Class::Dir object my $file = file('bob', 'file.txt'); # Path::Class::File object # Stringifies to 'foo/bar' on Unix, 'foo\bar' on Windows, etc. print "dir: $dir\n"; # Stringifies to 'bob/file.txt' on Unix, 'bob\file.txt' on Windows print "file: $file\n"; my $subdir = $dir->subdir('baz'); # foo/bar/baz my $parent = $subdir->parent; # foo/bar my $parent2 = $parent->parent; # foo my $dir2 = $file->dir; # bob # Work with foreign paths use Path::Class qw(foreign_file foreign_dir); my $file = foreign_file('Mac', ':foo:file.txt'); print $file->dir; # :foo: print $file->as_foreign('Win32'); # foo\file.txt # Interact with the underlying filesystem: # $dir_handle is an IO::Dir object my $dir_handle = $dir->open or die "Can't read $dir: $!"; # $file_handle is an IO::File object my $file_handle = $file->open($mode) or die "Can't read $file: $!";
Path::Class is a module for manipulation of file and directory specifications (strings describing their locations, like
'C:\Windows\Foo.txt') in a cross-platform manner. It supports pretty much every platform Perl runs on, including Unix, Windows, Mac, VMS, Epoc, Cygwin, OS/2, and NetWare.
The well-known module File::Spec also provides this service, but it's sort of awkward to use well, so people sometimes avoid it, or use it in a way that won't actually work properly on platforms significantly different than the ones they've tested their code on.
File::Spec internally, wrapping all the unsightly details so you can concentrate on your application code. Whereas
File::Spec provides functions for some common path manipulations,
Path::Class provides an object-oriented model of the world of path specifications and their underlying semantics.
File::Spec doesn't create any objects, and its classes represent the different ways in which paths must be manipulated on various platforms (not a very intuitive concept).
Path::Class creates objects representing files and directories, and provides methods that relate them to each other. For instance, the following
my $absolute = File::Spec->file_name_is_absolute( File::Spec->catfile( @dirs, $file ) );
can be written using
my $absolute = Path::Class::File->new( @dirs, $file )->is_absolute;
or even as
my $absolute = file( @dirs, $file )->is_absolute;
Similar readability improvements should happen all over the place when using
Path::Class can help solve real problems in your code too - for instance, how many people actually take the "volume" (like
C: on Windows) into account when writing
File::Spec-using code? I thought not. But if you use
Path::Class, your file and directory objects will know what volumes they refer to and do the right thing.
The following functions are exported by default.
If you would like to prevent their export, you may explicitly pass an empty list to perl's
use Path::Class ().
The following are exported only on demand.
A synonym for
A synonym for
Create a new Path::Class::Dir instance pointed to temporary directory.
my $temp = Path::Class::tempdir(CLEANUP => 1);
A synonym for
Although it is much easier to write cross-platform-friendly code with this module than with
File::Spec, there are still some issues to be aware of.
Ken Williams, KWILLIAMS@cpan.org
Copyright (c) Ken Williams. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.