File-System
view release on metacpan or search on metacpan
lib/File/System/Object.pm view on Meta::CPAN
=cut
sub lookup {
my $self = shift;
my $path = shift;
my $abspath = $self->normalize_path($path);
if ($self->is_root) {
my $result = $self;
my @components = split m#/#, $path;
for my $component (@components) {
$self->is_container && ($result = $result->child($component))
or return undef;
}
return $result;
} else {
return $self->root->lookup($abspath);
}
}
lib/File/System/Object.pm view on Meta::CPAN
if (ref $self && $path !~ m#^/#) {
# Relative to me (I am a container) or to parent (I am not a container)
$self->is_container
or $self = $self->parent;
# Fix us up to an absolute path
$path = $self->path."/$path";
}
# Break into components
my @components = split m#/+#, $path;
@components = ('', '') unless @components;
unshift @components, '' unless @components > 1;
for (my $i = 1; $i < @components;) {
if ($components[$i] eq '.') {
splice @components, $i, 1;
} elsif ($components[$i] eq '..' && $i == 1) {
splice @components, $i, 1;
} elsif ($components[$i] eq '..') {
splice @components, ($i - 1), 2;
lib/File/System/Object.pm view on Meta::CPAN
=cut
sub basename_of_path {
my $self = shift;
my $path = shift;
if ($path eq '/') {
return '/';
} else {
my @components = split m{/}, $path;
return pop @components;
}
}
=item $dirname = $obj-E<gt>dirname_of_path($normalized_path)
Given a normalized path, this method will return the dirname for that path according to the rules employed by C<File::System>. (These should be identical to the rules used by L<File::Basename> as far as I know.)
=cut
sub dirname_of_path {
my $self = shift;
my $path = shift;
if ($path eq '/') {
return '/';
} else {
my @components = split m{/}, $path;
pop @components;
push @components, '' if @components == 1;
return join '/', @components;
}
}
=back
=head1 SEE ALSO
( run in 0.736 second using v1.01-cache-2.11-cpan-71847e10f99 )