Devel-TraceINC
view release on metacpan or search on metacpan
lib/Devel/TraceINC.pm view on Meta::CPAN
my %hidden;
my $set_up_already;
sub hider {
my ($module) = pop();
$module =~ s{/}{::}g;
$module =~ s{\.pm$}{};
return undef if exists $hidden{$module};
}
sub import {
my ($class, @to_hide) = @_;
@hidden{@to_hide} = @to_hide;
if (! $set_up_already++) {
unshift @INC, \&hider;
Array::Sticky::INC->make_sticky;
}
}
1;
=head1 RECIPES
This module only makes the foremost element of @INC sticky. If you need to make different elements of @INC sticky,
then use L<Array::Sticky>:
=head2 Making the tail of @INC sticky
If you're using like L<The::Net> or L<Acme::Intraweb> to automatically install modules that you're missing,
then you might want to lock their behaviors to the end of @INC:
package My::The::Net;
use The::Net;
use Array::Sticky;
sub import {
tie @INC, 'Array::Sticky', body => [@INC], tail => [shift @INC];
}
=head1 SEE ALSO
=over 4
=item * L<Devel::INC::Sorted> solves this same problem slightly differently.
=item * 'perldoc -f require' and 'perldoc perltie' talk about code hooks in @INC, and tied arrays, respectively
=item * L<Acme::Intraweb> - places a coderef at the tail of @INC
=item * L<The::Net> - places a coderef at the tail of @INC
=item * L<Devel::Hide> - places a coderef at the head of @INC
=item * L<Test::Without::Module> - places a coderef at the head of @INC
=back
=head1 BUGS AND LIMITATIONS
If you do something like:
local @INC = @INC;
unshift @INC, '/some/path';
then this module won't be able to preserve your hooks at the head of @INC.
Please report bugs on this project's Github Issues page: L<http://github.com/belden/perl-array-sticky/issues>.
=head1 CONTRIBUTING
The repository for this software is freely available on this project's Github page:
L<http://github.com/belden/perl-array-sticky>. You may fork it there and submit pull requests in the standard
fashion.
=head1 COPYRIGHT AND LICENSE
(c) 2013 by Belden Lyman
This library is free software: you may redistribute it and/or modify it under the same terms as Perl
itself; either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have
available.
}
1;
__END__
=pod
=for test_synopsis 1;
__END__
=head1 NAME
Devel::TraceINC - Trace who is loading which perl modules
=head1 VERSION
version 1.100850
=head1 SYNOPSIS
$ perl -MDevel::TraceINC t/01_my_test.t
Test/More.pm loaded from package main, file t/01_my_test.t, line 6
Test/Builder/Module.pm loaded from package Test::More, file /usr/local/svn/perl/Test/More.pm, line 22
Test/Builder.pm loaded from package Test::Builder::Module, file /usr/local/svn/perl/Test/Builder/Module.pm, line 3
Exporter/Heavy.pm loaded from package Exporter, file /System/Library/Perl/5.8.6/Exporter.pm, line 17
...
=head1 DESCRIPTION
I had a situation where a program was loading a module but I couldn't find
where in the code it was loaded. It turned out that I loaded some module,
which loaded another module, which loaded the module in question. To be
able to track down who loads what, I wrote Devel::TraceINC.
Just C<use()> the module and it will print a warning every time a module is
searched for in C<@INC>, i.e., loaded.
=head1 INSTALLATION
See perlmodinstall for information and options on installing Perl modules.
=head1 BUGS AND LIMITATIONS
No bugs have been reported.
Please report any bugs or feature requests through the web interface at
L<http://rt.cpan.org/Public/Dist/Display.html?Name=Devel-TraceINC>.
=head1 AVAILABILITY
The latest version of this module is available from the Comprehensive Perl
Archive Network (CPAN). Visit L<http://www.perl.com/CPAN/> to find a CPAN
site near you, or see
L<http://search.cpan.org/dist/Devel-TraceINC/>.
The development version lives at
L<http://github.com/marcelgrunauer/Devel-TraceINC/>.
Instead of sending patches, please fork this project using the standard git
and github infrastructure.
=head1 AUTHOR
Marcel Gruenauer <marcel@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2007 by Marcel Gruenauer.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
( run in 4.125 seconds using v1.01-cache-2.11-cpan-a5162978ef8 )