/usr/share/perl5/File/Share.pm is in libfile-share-perl 0.03-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | ##
# name: File::Share
# abstract: Extend File::ShareDir to Local Libraries
# author: Ingy döt Net <ingy@ingy.net>
# license: perl
# copyright: 2011, 2013
# see:
# - File::ShareDir
# - Devel::Local
use v5.8.3;
package File::Share;
use strict;
use warnings;
our $VERSION = '0.03';
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 1.03 ();
use Cwd qw[abs_path];
use File::Spec ();
sub dist_dir {
my ($dist) = @_;
(my $inc = $dist) =~ s!(-|::)!/!g;
$inc .= '.pm';
my $path = $INC{$inc} || '';
if ($path and
$path =~ s!(\S.*?)[\\/]?\bb?lib\b.*!$1! and
( -e "$path/Makefile.PL" or -e "$path/dist.ini" or -e "$path/Build.PL" ) and
-e "$path/share"
) {
return abs_path "$path/share";
}
else {
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";
}
=head1 SYNOPSIS
use File::Share ':all';
my $dir = dist_dir('Foo-Bar');
my $file = dist_file('Foo-Bar', 'file.txt');
=head1 DESCRIPTION
THis module is a dropin replacement for L<File::ShareDir>. It supports the
C<dist_dir> and C<dist_file> functions, except these functions have been
enhanced to understand when the developer's local C<./share/> directory should
be used.
NOTE: module_dist and module_file are not yet supported, because (afaik) there
is no well known way to populate per-module share files. This may change in
the future. Please contact me if you know how to do this.
=head1 PROBLEM AND SOLUTION
L<Module::Install> has an C<install_share> directive that allows you to
install various files associated with a distribution. By convention, module
authors always put these in a directory called C<share/>. However,
File::ShareDir can only find files after they have been installed. This can be
problematic when running development tests.
File::Share will look for a local C<share> directory, if it notices that the
module corresponding was loaded from a development path.
L<Devel::Local> gives you an easy way to use a bunch of source repositories as
though their lib and bin directories had already been installed.
C<File::Share> lets you play along with that.
|