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 File::ShareDir(); 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;