diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm index 570fe52b3..efed664b7 100644 --- a/lib/ExtUtils/MM_Unix.pm +++ b/lib/ExtUtils/MM_Unix.pm @@ -3029,7 +3029,7 @@ sub parse_version { next if $inpod || /^\s*#/; chop; next if /^\s*(if|unless|elsif)/; - if ( m{^ \s* package \s+ \w[\w\:\']* \s+ (v?[0-9._]+) \s* (;|\{) }x ) { + if ( m{^ \s* (?:package|class) \s+ \w[\w\:\']* \s+ (v?[0-9._]+) \s* (:|;|\{) }x ) { no warnings; $result = $1; } diff --git a/t/parse_version.t b/t/parse_version.t index ecba13d8a..8141fb6bd 100644 --- a/t/parse_version.t +++ b/t/parse_version.t @@ -107,6 +107,40 @@ our $VERSION = 2.34; END } +if ( "$]" >= 5.038 ) { + $versions{'class Foo 1.23;' } = '1.23'; + $versions{'class Foo::Bar 1.23;' } = '1.23'; + $versions{'class Foo v1.2.3;' } = 'v1.2.3'; + $versions{'class Foo::Bar v1.2.3;' } = 'v1.2.3'; + $versions{' class Foo::Bar v1.2.3;' } = 'v1.2.3'; + $versions{"class Foo'Bar 1.23;" } = '1.23'; + $versions{'class Foo 1.230;' } = '1.230'; + + $versions{'class Foo 1.23 { }' } = '1.23'; + $versions{'class Foo::Bar 1.23 { }' } = '1.23'; + $versions{'class Foo v1.2.3 { }' } = 'v1.2.3'; + $versions{'class Foo::Bar v1.2.3 { }' } = 'v1.2.3'; + $versions{' class Foo::Bar v1.2.3 { }' } = 'v1.2.3'; + $versions{"class Foo'Bar 1.23 { }" } = '1.23'; + $versions{'class Foo 1.230 { }' } = '1.230'; + + $versions{'class Foo 1.23 :isa(Bar);' } = '1.23'; + $versions{'class Foo::Bar 1.23 :isa(Bar);' } = '1.23'; + $versions{'class Foo v1.2.3 :isa(Bar);' } = 'v1.2.3'; + $versions{'class Foo::Bar v1.2.3 :isa(Bar);' } = 'v1.2.3'; + $versions{' class Foo::Bar v1.2.3 :isa(Bar);' } = 'v1.2.3'; + $versions{"class Foo'Bar 1.23 :isa(Bar);" } = '1.23'; + $versions{'class Foo 1.230 :isa(Bar);' } = '1.230'; + + $versions{'class Foo 1.23 :isa(Bar) { }' } = '1.23'; + $versions{'class Foo::Bar 1.23 :isa(Bar) { }' } = '1.23'; + $versions{'class Foo v1.2.3 :isa(Bar) { }' } = 'v1.2.3'; + $versions{'class Foo::Bar v1.2.3 :isa(Bar) { }' } = 'v1.2.3'; + $versions{' class Foo::Bar v1.2.3 :isa(Bar) { }' } = 'v1.2.3'; + $versions{"class Foo'Bar 1.23 :isa(Bar) { }" } = '1.23'; + $versions{'class Foo 1.230 :isa(Bar) { }' } = '1.230'; +} + if ( "$]" < 5.012 ) { delete $versions{'$VERSION = -1.0'}; }