Catmandu
view release on metacpan or search on metacpan
lib/Catmandu/Path/simple.pm view on Meta::CPAN
with 'Catmandu::Path', 'Catmandu::Emit';
use overload '""' => sub {$_[0]->path};
sub split_path {
my ($self) = @_;
my $path = $self->path;
if (is_value($path)) {
$path = trim($path);
$path =~ s/^\$[\.\/]//;
$path = [map {s/\\(?=[\.\/])//g; $_} split /(?<!\\)[\.\/]/, $path];
return $path;
}
if (is_array_ref($path)) {
return $path;
}
Catmandu::Error->throw("path should be a string or arrayref of strings");
}
sub getter {
lib/Catmandu/Util.pm view on Meta::CPAN
# dies on error
Cpanel::JSON::XS->new->decode($text);
}
##
# Split a path on . or /, but not on \/ or \.
sub split_path {
my ($path) = @_;
$path = trim($path);
$path =~ s/^\$[\.\/]//;
return [map {s/\\(?=[\.\/])//g; $_} split /(?<!\\)[\.\/]/, $path];
}
sub join_path {
my $path = File::Spec->catfile(@_);
$path =~ s!/\./!/!g;
while ($path =~ s![^/]*/\.\./!!) { }
$path;
}
lib/Catmandu/Util/Path.pm view on Meta::CPAN
our @EXPORT_OK = qw(
looks_like_path
as_path
);
our %EXPORT_TAGS = (all => \@EXPORT_OK,);
sub looks_like_path { # TODO only recognizes Catmandu::Path::simple
my ($path) = @_;
is_string($path) && $path =~ /^\$[\.\/]/ ? 1 : 0;
}
sub as_path {
my ($path, $path_type) = @_;
if (is_value($path)) {
$path_type //= 'simple';
state $class_cache = {};
my $class = $class_cache->{$path_type}
||= require_package($path_type, 'Catmandu::Path');
$class->new(path => $path);
( run in 0.276 second using v1.01-cache-2.11-cpan-cc502c75498 )