From 3ccc98d18c503cdf062776bcb874c7097f6d03eb Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 25 Jan 2011 15:33:05 -0600 Subject: docs --- lib/circular/require.pm | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'lib') diff --git a/lib/circular/require.pm b/lib/circular/require.pm index 882b2b7..16660c2 100644 --- a/lib/circular/require.pm +++ b/lib/circular/require.pm @@ -1,8 +1,42 @@ package circular::require; use strict; use warnings; +# ABSTRACT: detect circularity in use/require statements + use Package::Stash; +=head1 SYNOPSIS + + package Foo; + use Bar; + + package Bar; + use Foo; + + package main; + no circular::require; + use Foo; # warns + +or + + perl -M-circular::require foo.pl + +=head1 DESCRIPTION + +Perl by default just ignores cycles in require statements - if Foo.pm does +C and Bar.pm does C, doing C elsewhere will start +loading Foo.pm, then hit the C statement, start loading Bar.pm, hit the +C statement, notice that Foo.pm has already started loading and ignore it, +and continue loading Bar.pm. But Foo.pm hasn't finished loading yet, so if +Bar.pm uses anything from Foo.pm (which it likely does, if it's loading it), +those won't be accessible while the body of Bar.pm is being executed. This can +lead to some very confusing errors, especially if introspection is happening at +load time (C in L classes, for example). This module +generates a warning whenever a module is skipped due to being loaded, if that +module has not finished executing. + +=cut + my %seen; my $saved; @@ -35,4 +69,48 @@ sub unimport { $stash->add_package_symbol('&require', \&_require); } +=head1 CAVEATS + +This module works by overriding C, and so other modules +which do this may cause issues if they aren't written properly. This also means +that the effect is global, but this is typically the most useful usage. + +=head1 BUGS + +No known bugs. + +Please report any bugs through RT: email +C, or browse to +L. + +=head1 SUPPORT + +You can find this documentation for this module with the perldoc command. + + perldoc circular::require + +You can also look for information at: + +=over 4 + +=item * AnnoCPAN: Annotated CPAN documentation + +L + +=item * CPAN Ratings + +L + +=item * RT: CPAN's request tracker + +L + +=item * Search CPAN + +L + +=back + +=cut + 1; -- cgit v1.2.3-54-g00ecf