File-XDG
view release on metacpan or search on metacpan
lib/File/XDG.pm view on Meta::CPAN
package File::XDG;
use strict;
use warnings;
use Carp ();
use Config;
use Ref::Util qw( is_coderef is_arrayref );
use if $^O eq 'MSWin32', 'Win32';
# ABSTRACT: Basic implementation of the XDG base directory specification
our $VERSION = '1.03'; # VERSION
sub new {
my $class = shift;
my %args = (@_);
my $name = delete $args{name};
Carp::croak('application name required') unless defined $name;
my $api = delete $args{api};
$api = 0 unless defined $api;
Carp::croak("Unsupported api = $api") unless $api == 0 || $api == 1;
my $path_class = delete $args{path_class};
unless(defined $path_class) {
if($api >= 1) {
$path_class = 'Path::Tiny';
} else {
$path_class = 'Path::Class';
}
}
my $file_class = $path_class eq 'Path::Class' ? 'Path::Class::File' : $path_class;
my $dir_class = $path_class eq 'Path::Class' ? 'Path::Class::Dir' : $path_class;
if(is_coderef($path_class))
{
$dir_class = $file_class = $path_class;
}
elsif(is_arrayref($path_class))
{
($file_class, $dir_class) = @$path_class;
}
elsif($path_class eq 'Path::Tiny')
{
require Path::Tiny;
}
elsif($path_class eq 'Path::Class')
{
require Path::Class::File;
require Path::Class::Dir;
}
elsif($path_class eq 'File::Spec')
{
require File::Spec;
$file_class = sub { File::Spec->catfile(@_) };
$dir_class = sub { File::Spec->catdir(@_) };
}
else
{
Carp::croak("Unknown path class: $path_class");
}
( run in 1.979 second using v1.01-cache-2.11-cpan-39bf76dae61 )