App-perlutils
view release on metacpan or search on metacpan
bin/depends view on Meta::CPAN
#!/usr/bin/perl
# abstract: list dependencies for perl modules/scripts, with optional core info
use vars qw($VERSION);
our $VERSION = '0.016';
use strict;
use File::Find::Rule;
use File::LibMagic ':easy';
use Module::CoreList;
use Term::ExtendedColor qw(:attributes);
use File::LsColor qw(ls_color);
use Getopt::Long;
my %opt = (
core => 0,
pragma => 0,
);
GetOptions(
'c|core' => \$opt{core},
'p|pragmas' => \$opt{pragma},
'h|help' => sub {
print "-c, --core also list core modules\n";
print "-h, --help display this help and exit\n";
exit;
},
);
#< pragmas
my %pragmas = (
attributes => "Get/set subroutine or variable attributes",
autodie => "Replace functions with ones that succeed or die with lexical scope",
autouse => "Postpone load of modules until a function is used",
base => "Establish an ISA relationship with base classes at compile time",
bigint => "Transparent BigInteger support for Perl",
bignum => "Transparent BigNumber support for Perl",
bigrat => "Transparent BigNumber/BigRational support for Perl",
blib => "Use MakeMaker's uninstalled version of a package",
bytes => "Expose the individual bytes of characters",
charnames => "Access to Unicode character names and named character sequences; also define character names",
constant => "Declare constants",
deprecate => "Perl pragma for deprecating the inclusion of a module in core",
diagnostics => "Produce verbose warning diagnostics",
encoding => "Allows you to write your script in non-ASCII and non-UTF-8",
experimental => "Experimental features made easy",
feature => "Enable new features",
fields => "Compile-time class fields",
filetest => "Control the filetest permission operators",
if => "use a Perl module if a condition holds",
integer => "Use integer arithmetic instead of floating point",
less => "Request less of something",
lib => "Manipulate \@INC at compile time",
locale => "Use or avoid POSIX locales for built-in operations",
mro => "Method Resolution Order",
ok => "Alternative to Test::More::use_ok",
open => "Set default PerlIO layers for input and output",
ops => "Restrict unsafe operations when compiling",
overload => "Package for overloading Perl operations",
overloading => "Lexically control overloading",
parent => "Establish an ISA relationship with base classes at compile time",
re => "Alter regular expression behaviour",
sigtrap => "Enable simple signal handling",
sort => "Control sort() behaviour",
strict => "Restrict unsafe constructs",
subs => "Predeclare subroutine names",
threads => "Perl interpreter-based threads",
utf8 => "Enable/disable UTF-8 (or UTF-EBCDIC) in source code",
vars => "Predeclare global variable names",
version => "Perl extension for Version Objects",
vmsish => "Control VMS-specific language features",
warnings => "Control optional warnings",
);
#>
my $file = shift;
my @perls;
if(-d $file) {
my $ff = File::Find::Rule->new;
$ff->file;
$ff->name('*.pm', '*.pl');
@perls = grep{ !/blib/ } $ff->in( $file );
if(!@perls) {
$ff->name('*');
print $ff->in($file);
@perls = grep{ MagicFile($_) =~ m/perl/i } $ff->in($file);
}
}
elsif(-f $file) {
@perls = $file;
}
if(!@perls) {
my $ff = File::Find::Rule->new;
$ff->file;
@perls = grep{!/(?:blib|[.]git)/ } $ff->in( '.' );
@perls = grep{ MagicFile($_) =~ m/perl/i } @perls;
}
@perls or print "No Perl files found.\n" and exit;
my %result = %{ get_modules(@perls) };
my $previous;
for my $file(sort(keys(%result))) {
printf "%s\n", fg(240, join('', '-' x 40));
if($previous ne $file) {
$previous = $file;
}
my %pragmas_in_use;
( run in 1.964 second using v1.01-cache-2.11-cpan-ceb78f64989 )