summaryrefslogtreecommitdiff
path: root/lib/Parse
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Parse')
-rw-r--r--lib/Parse/PMFile.pm31
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/Parse/PMFile.pm b/lib/Parse/PMFile.pm
index 00d31c3..6810e68 100644
--- a/lib/Parse/PMFile.pm
+++ b/lib/Parse/PMFile.pm
@@ -10,7 +10,7 @@ use Dumpvalue;
use version ();
use File::Spec ();
-our $VERSION = '0.46';
+our $VERSION = '0.47';
our $VERBOSE = 0;
our $ALLOW_DEV_VERSION = 0;
our $FORK = 0;
@@ -358,6 +358,7 @@ sub _packages_per_pmfile {
local $/ = "\n";
my $inpod = 0;
+ my $package_or_class = 'package';
my $checked_bom;
PLINE: while (<$fh>) {
chomp;
@@ -377,6 +378,32 @@ sub _packages_per_pmfile {
last PLINE;
}
+=pod
+ # hide in the pod block until 'class' is added to a version bundle
+ if ($pline =~ /^[\s\{;]*use\s(+v?5\.[0-9]+)/) {
+ my $version = $1;
+ my $version_bundle_for_class = version->parse("v5.xx.xx");
+ if (eval { version->parse($version) >= $version_bundle_for_class) {
+ $package_or_class = 'package|class|role';
+ }
+ next PLINE;
+ }
+=cut
+
+ # use feature 'class'; enabels class (and role, though not implemented yet)
+ if ($pline =~ /^[\s\{;]*use\s+(?:feature|experimental)\s+[^;]+\b(?:class|all)[^;]*;/) {
+ $package_or_class = 'package|class';
+ }
+
+ # some modules also enables class and role
+ # XXX: what to do with MooseX::Declare and a few minor experiments)
+ if ($pline =~ /^[\s\{;]*use\s+(?:Feature::Compat::Class)[^;]*;/) {
+ $package_or_class = 'package|class';
+ }
+ if ($pline =~ /^[\s\{;]*use\s+(?:Object::Pad)[^;]*;/) {
+ $package_or_class = 'package|class|role';
+ }
+
my $pkg;
my $strict_version;
@@ -385,7 +412,7 @@ sub _packages_per_pmfile {
# (.*) # takes too much time if $pline is long
#(?<![*\$\\@%&]) # no sigils
^[\s\{;]*
- \b(?:package|class|role)\s+
+ \b(?:$package_or_class)\s+
([\w\:\']+)
\s*
(?: $ | [\}\;] | \{ | \s+($version::STRICT) )