./devel/p5-circular-require, Perl5 module to detect circularity in use/require statements

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 0.11nb2, Package name: p5-circular-require-0.11nb2, Maintainer: pkgsrc-users

Perl by default just ignores cycles in require statements - if Foo.pm does
use Bar and Bar.pm does use Foo, doing use Foo elsewhere will start loading
Foo.pm, then hit the use statement, start loading Bar.pm, hit the use
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 (make_immutable in Moose classes, for example). This
module generates a warning whenever a module is skipped due to being loaded,
if that module has not finished executing.

This module works as a pragma, and typically pragmas have lexical scope.
Lexical scope doesn't make a whole lot of sense for this case though,
because the effect it's tracking isn't lexical (what does it mean to disable
the pragma inside of a cycle vs. outside of a cycle? does disabling it
within a cycle cause it to always be disabled for that cycle, or only if
it's disabled at the point where the warning would otherwise be generated?
etc.), but dynamic scope (the scope that, for instance, local uses) does,
and that's how this module works. Saying no circular::require enables the
module for the current dynamic scope, and use circular::require disables
it for the current dynamic scope. Hopefully, this will just do what you mean.


Required to run:
[lang/perl5] [devel/p5-Package-Stash]

Master sites: (Expand)

SHA1: d33c9b715834ca4bc5d6c4cadccaf57c25b74729
RMD160: f3fdc79c01c08742a765ae860641d150a5c9039c
Filesize: 16.235 KB

Version history: (Expand)


CVS history: (Expand)


   2016-06-08 21:25:20 by Thomas Klausner | Files touched by this commit (2236) | Package updated
Log message:
Bump PKGREVISION for perl-5.24.
   2015-11-03 04:29:40 by Alistair G. Crooks | Files touched by this commit (1995)
Log message:
Add SHA512 digests for distfiles for devel category

Issues found with existing distfiles:
	distfiles/eclipse-sourceBuild-srcIncluded-3.0.1.zip
	distfiles/fortran-utils-1.1.tar.gz
	distfiles/ivykis-0.39.tar.gz
	distfiles/enum-1.11.tar.gz
	distfiles/pvs-3.2-libraries.tgz
	distfiles/pvs-3.2-linux.tgz
	distfiles/pvs-3.2-solaris.tgz
	distfiles/pvs-3.2-system.tgz
No changes made to these distinfo files.

Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden).  All existing
SHA1 digests retained for now as an audit trail.
   2015-06-12 12:52:19 by Thomas Klausner | Files touched by this commit (3152)
Log message:
Recursive PKGREVISION bump for all packages mentioning 'perl',
having a PKGNAME of p5-*, or depending such a package,
for perl-5.22.0.
   2015-02-18 13:53:17 by Makoto Fujiwara | Files touched by this commit (2) | Package updated
Log message:
Update to 0.11
---------------
0.11  2013-07-24
      - convert to Devel::OverrideGlobalRequire
   2014-10-09 16:07:17 by Thomas Klausner | Files touched by this commit (1163)
Log message:
Remove pkgviews: don't set PKG_INSTALLATION_TYPES in Makefiles.
   2014-05-30 01:38:20 by Thomas Klausner | Files touched by this commit (3049)
Log message:
Bump for perl-5.20.0.
Do it for all packages that
* mention perl, or
* have a directory name starting with p5-*, or
* depend on a package starting with p5-
like last time, for 5.18, where this didn't lead to complaints.
Let me know if you have any this time.
   2013-07-03 10:41:30 by Jens Rehsack | Files touched by this commit (3)
Log message:
Adding package for CPAN distribution circular-require version 0.10 into
devel/p5-circular-require.

Perl by default just ignores cycles in require statements - if Foo.pm does
use Bar and Bar.pm does use Foo, doing use Foo elsewhere will start loading
Foo.pm, then hit the use statement, start loading Bar.pm, hit the use
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 (make_immutable in Moose classes, for example). This
module generates a warning whenever a module is skipped due to being loaded,
if that module has not finished executing.

This module works as a pragma, and typically pragmas have lexical scope.
Lexical scope doesn't make a whole lot of sense for this case though,
because the effect it's tracking isn't lexical (what does it mean to disable
the pragma inside of a cycle vs. outside of a cycle? does disabling it
within a cycle cause it to always be disabled for that cycle, or only if
it's disabled at the point where the warning would otherwise be generated?
etc.), but dynamic scope (the scope that, for instance, local uses) does,
and that's how this module works. Saying no circular::require enables the
module for the current dynamic scope, and use circular::require disables
it for the current dynamic scope. Hopefully, this will just do what you mean.