NAME

App::hopen::Util::BasedPath - A path relative to a specified base

SYNOPSIS

A BasedPath represents a path to a file or directory, plus a directory with respect to which that path is defined. That means you can rebase the file or dir while retaining the relative path. Usage example:

    my $based = based_path(path => file('foo'), base => dir('bar'));
    $based->orig;                   # Path::Class::File for bar/foo
    $based->path_on(dir('quux'));   # Path::Class::File for quux/foo

MEMBERS

path

The path, as a Path::Class::File or Path::Class::Dir instance. May not be specified as a string when creating a new object, since there's no reliable way to tell whether a file or directory would be intended.

This must be a relative path, since the whole point of this module is to combine partial paths!

base

A Path::Class::Dir to which the "path" is relative. May be specified as a string for convenience; however, '' (the empty string) is forbidden (to avoid confusion). Use dir() for the current directory or dir('') for the root directory.

orig_cwd

The working directory at the time the BasedPath instance was created. This is an absolute path.

FUNCTIONS

is_file

Convenience function returning whether "path" is a Path::Class::File.

orig

Returns a Path::Class::* representing "path" relative to "base", i.e., the original location.

path_wrt

Returns a Path::Class::* representing the relative path from a given directory to the original location. (wrt = With Respect To) Example:

    # In directory "project"
    my $based = based_path(path => file('foo'), base => dir('bar'));
    $based->orig;                   # Path::Class::File for bar/foo
    $based->path_wrt('..');         # Path::Class::File for project/bar/foo

path_on

    my $new_path = $based_path->path_on($new_base);

Given a Path::Class::Dir, return a Path::Class::* instance representing "path", but relative to $new_base instead of to "base".

This is in some ways the opposite of Path::Class::File::relative():

    # in directory 'dir'
    my $file = file('foo.txt');     # The foo.txt in dir/
    say $file->relative('..');      # "dir/foo.txt" - same file, but
                                    # accessed from "..".

    my $based = based_path(path=>file('foo.txt'), base=>'');
        # Name foo.txt, based off dir
    say $based->path_on(dir('..')); # dir/../foo.txt - a different file

_stringify

Stringify the instance in a way that is human-readable, but NOT suitable for machine consumption.

BUILD

Sanity-check the arguments.

STATIC FUNCTIONS

based_path

A synonym for App::hopen::Util::BasedPath->new(). Exported by default.