Path::Class

Cross-platform path specification manipulation

Latest version: 0.37 registry icon
Maintenance score
39
Safety score
100
Popularity score
14
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.37 0 0 0 0 0
0.36 0 0 0 0 0
0.35 0 0 0 0 0
0.34 0 0 0 0 0
0.33 0 0 0 0 0
0.32 0 0 0 0 0
0.31 0 0 0 0 0
0.29 0 0 0 0 0
0.28 0 0 0 0 0
0.27 0 0 0 0 0
0.26 0 0 0 0 0
0.25 0 0 0 0 0
0.24 0 0 0 0 0
0.23 0 0 0 0 0
0.22 0 0 0 0 0
0.21 0 0 0 0 0
0.19 0 0 0 0 0
0.18 0 0 0 0 0
0.17 0 0 0 0 0
0.16 0 0 0 0 0
0.15 0 0 0 0 0
0.14 0 0 0 0 0
0.13 0 0 0 0 0
0.12 0 0 0 0 0
0.11 0 0 0 0 0
0.10 0 0 0 0 0
0.09 0 0 0 0 0
0.08 0 0 0 0 0
0.07 0 0 0 0 0
0.06 0 0 0 0 0
0.05 0 0 0 0 0
0.04 0 0 0 0 0
0.03_01 0 0 0 0 0
0.03 0 0 0 0 0
0.02 0 0 0 0 0
0.01 0 0 0 0 0

Stability
Latest release:

0.37 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

Artistic-1.0   -   Artistic License 1.0

Not a wildcard

Not proprietary

OSI Compliant


GPL-1.0-or-later   -   GNU General Public License v1.0 or later

Not a wildcard

Not proprietary

OSI Compliant



=head1 NAME

Path::Class - Cross-platform path specification manipulation for Perl

=head1 SYNOPSIS

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: $!";

=head1 DESCRIPTION

CPath::Class is a module for manipulation of file and directory specifications (strings describing their locations, like C<'/home/ken/foo.txt'> or C<'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 LFile::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.

In fact, CPath::Class uses CFile::Spec internally, wrapping all the unsightly details so you can concentrate on your application code. Whereas CFile::Spec provides functions for some common path manipulations, CPath::Class provides an object-oriented model of the world of path specifications and their underlying semantics. CFile::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). CPath::Class creates objects representing files and directories, and provides methods that relate them to each other. For instance, the following CFile::Spec code:

my $absolute = File::Spec->file_name_is_absolute( File::Spec->catfile( @dirs, $file ) );

can be written using CPath::Class as

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 CPath::Class.

Using CPath::Class can help solve real problems in your code too - for instance, how many people actually take the "volume" (like C<C:> on Windows) into account when writing CFile::Spec-using code? I thought not. But if you use CPath::Class, your file and directory objects will know what volumes they refer to and do the right thing.

The guts of the CPath::Class code live in the LPath::Class::File and LPath::Class::Dir modules, so please see those modules' documentation for more details about how to use them.

=head2 EXPORT

The following functions are exported by default.

=over 4

=item file

A synonym for C<< Path::Class::File->new >>.

=item dir

A synonym for C<< Path::Class::Dir->new >>.

=back

If you would like to prevent their export, you may explicitly pass an empty list to perl's C, i.e. C<use Path::Class ()>.

The following are exported only on demand.

=over 4

=item foreign_file

A synonym for C<< Path::Class::File->new_foreign >>.

=item foreign_dir

A synonym for C<< Path::Class::Dir->new_foreign >>.

=item tempdir

Create a new Path::Class::Dir instance pointed to temporary directory.

my $temp = Path::Class::tempdir(CLEANUP => 1);

A synonym for C<< Path::Class::Dir->new(File::Temp::tempdir(@_)) >>.

=back

=head1 Notes on Cross-Platform Compatibility

Although it is much easier to write cross-platform-friendly code with this module than with CFile::Spec, there are still some issues to be aware of.

=over 4

=item *

On some platforms, notably VMS and some older versions of DOS (I think), all filenames must have an extension. Thus if you create a file called F<foo/bar> and then ask for a list of files in the directory F, you may find a file called F<bar.> instead of the F you were expecting. Thus it might be a good idea to use an extension in the first place.

=back

=head1 AUTHOR

Ken Williams, KWILLIAMS@cpan.org

=head1 COPYRIGHT

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.

=head1 SEE ALSO

LPath::Class::Dir, LPath::Class::File, LFile::Spec

=cut