X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FAutoSplit.pm;h=41d5489531827a4856f5916702491d237f855605;hb=cc31225e4d4aa42bdd0b59e2f2e27664df411220;hp=471499adcb1b3efddf00a222d3f76f53843defac;hpb=4e6ea2c3b30d1ef2a7f2c68db5d82351f13b502f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/AutoSplit.pm b/lib/AutoSplit.pm index 471499a..41d5489 100644 --- a/lib/AutoSplit.pm +++ b/lib/AutoSplit.pm @@ -1,17 +1,16 @@ package AutoSplit; +use 5.005_64; use Exporter (); use Config qw(%Config); use Carp qw(carp); use File::Basename (); use File::Path qw(mkpath); use strict; -use vars qw( - $VERSION @ISA @EXPORT @EXPORT_OK - $Verbose $Keep $Maxlen $CheckForAutoloader $CheckModTime - ); +our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Verbose, $Keep, $Maxlen, + $CheckForAutoloader, $CheckModTime); -$VERSION = "1.0302"; +$VERSION = "1.0305"; @ISA = qw(Exporter); @EXPORT = qw(&autosplit &autosplit_lib_modules); @EXPORT_OK = qw($Verbose $Keep $Maxlen $CheckForAutoloader $CheckModTime); @@ -147,6 +146,13 @@ if (defined (&Dos::UseLFN)) { } my $Is_VMS = ($^O eq 'VMS'); +# allow checking for valid ': attrlist' attachments +my $nested; +$nested = qr{ \( (?: (?> [^()]+ ) | (?p{ $nested }) )* \) }x; +my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) (?:\s*\:\s*|\s+(?!\:)) }x; +my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x; + + sub autosplit{ my($file, $autodir, $keep, $ckal, $ckmt) = @_; @@ -219,7 +225,7 @@ sub autosplit_file { while () { # Skip pod text. $fnr++; - $in_pod = 1 if /^=/; + $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; next if ($in_pod || /^=cut/); @@ -280,7 +286,7 @@ sub autosplit_file { $last_package = ''; while () { $fnr++; - $in_pod = 1 if /^=/; + $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; next if ($in_pod || /^=cut/); # the following (tempting) old coding gives big troubles if a @@ -289,7 +295,7 @@ sub autosplit_file { if (/^package\s+([\w:]+)\s*;/) { $this_package = $def_package = $1; } - if (/^sub\s+([\w:]+)(\s*\(.*?\))?/) { + if (/^sub\s+([\w:]+)(\s*(?:\(.*?\))?(?:$attr_list)?)/) { print OUT "# end of $last_package\::$subname\n1;\n" if $last_package; $subname = $1; @@ -346,8 +352,10 @@ EOT } $last_package = $this_package if defined $this_package; } - print OUT @cache,"1;\n# end of $last_package\::$subname\n"; - close(OUT); + if ($subname) { + print OUT @cache,"1;\n# end of $last_package\::$subname\n"; + close(OUT); + } close(IN); if (!$keep){ # don't keep any obsolete *.al files in the directory @@ -356,7 +364,7 @@ EOT # perl downcases all filenames on VMS (which upcases all filenames) so # we'd better downcase the sub name list too, or subs with upper case # letters in them will get their .al files deleted right after they're - # created. (The mixed case sub name wonn't match the all-lowercase + # created. (The mixed case sub name won't match the all-lowercase # filename, and so be cleaned up as a scrap file) if ($Is_VMS or $Is83) { %outfiles = map {lc($_) => lc($_) } @outfiles; @@ -372,7 +380,7 @@ EOT foreach (sort readdir(OUTDIR)){ next unless /\.al$/; my($file) = "$dir/$_"; - $file = lc $file if $Is83; + $file = lc $file if $Is83 or $Is_VMS; next if $outfiles{$file}; print " deleting $file\n" if ($Verbose>=2); my($deleted,$thistime); # catch all versions on VMS @@ -459,3 +467,6 @@ sub test6 { return join ":", __FILE__,__LINE__; } package Yet::Another::AutoSplit; sub testtesttesttest4_1 ($) { "another test 4\n"; } sub testtesttesttest4_2 ($$) { "another duplicate test 4\n"; } +package Yet::More::Attributes; +sub test_a1 ($) : locked :locked { 1; } +sub test_a2 : locked { 1; }