From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict; use warnings;
package File::Share;
our $VERSION = '0.27';
use base 'Exporter';
our @EXPORT_OK = qw[
dist_dir
dist_file
module_dir
module_file
class_dir
class_file
];
our %EXPORT_TAGS = (
all => [ @EXPORT_OK ],
ALL => [ @EXPORT_OK ],
);
use Cwd qw(abs_path);
use File::Spec();
sub dist_dir {
my ($dist) = @_;
(my $inc = $dist) =~ s!(-|::)!/!g;
$inc .= '.pm';
my $path = $INC{$inc} || '';
$path =~ s/$inc$//;
$path = Cwd::realpath( File::Spec->catfile($path, '..') );
my $dir;
if ($path =~ m<^(.*?)[\/\\]blib\b> and
-d File::Spec->catdir($1, 'share') and
-d ($dir = File::Spec->catdir($1, 'share'))
) {
return abs_path($dir);
}
if ($path and
-d File::Spec->catdir($path, 'lib') and
-d ($dir = File::Spec->catdir($path, 'share'))
) {
return abs_path($dir);
}
return File::ShareDir::dist_dir($dist);
}
sub dist_file {
my ($dist, $file) = @_;
my $dir = dist_dir($dist);
return File::Spec->catfile( $dir, $file );
}
sub module_dir {
die "File::Share::module_dir not yet supported";
}
sub module_file {
die "File::Share::module_file not yet supported";
}
1;