diff options
author | Michael G. Schwern <schwern@pobox.com> | 2002-12-21 11:29:41 -0800 |
---|---|---|
committer | hv <hv@crypt.org> | 2002-12-30 03:13:42 +0000 |
commit | b6c146dd05d7f6ee2801592b9ba97b59966f4411 (patch) | |
tree | 31371dde877ca301fc040defb22224e818bdd2b1 | |
parent | f28098ff87449d3722db2e2f1fbf980414334637 (diff) | |
download | perl-b6c146dd05d7f6ee2801592b9ba97b59966f4411.tar.gz |
Holding filehandle open
Message-ID: <20021222032941.GD24887@blackrider.schwern.org>
p4raw-id: //depot/perl@18372
-rw-r--r-- | lib/AutoSplit.pm | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/lib/AutoSplit.pm b/lib/AutoSplit.pm index 3c45d92113..7fd9487bc9 100644 --- a/lib/AutoSplit.pm +++ b/lib/AutoSplit.pm @@ -227,12 +227,12 @@ sub autosplit_file { # allow just a package name to be used $filename .= ".pm" unless ($filename =~ m/\.pm\z/); - open(IN, "<$filename") or die "AutoSplit: Can't open $filename: $!\n"; + open(my $in, "<$filename") or die "AutoSplit: Can't open $filename: $!\n"; my($pm_mod_time) = (stat($filename))[9]; my($autoloader_seen) = 0; my($in_pod) = 0; my($def_package,$last_package,$this_package,$fnr); - while (<IN>) { + while (<$in>) { # Skip pod text. $fnr++; $in_pod = 1 if /^=\w/; @@ -297,7 +297,8 @@ sub autosplit_file { my @cache = (); my $caching = 1; $last_package = ''; - while (<IN>) { + my $out; + while (<$in>) { $fnr++; $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; @@ -308,8 +309,9 @@ sub autosplit_file { if (/^package\s+([\w:]+)\s*;/) { $this_package = $def_package = $1; } + if (/^sub\s+([\w:]+)(\s*(?:\(.*?\))?(?:$attr_list)?)/) { - print OUT "# end of $last_package\::$subname\n1;\n" + print $out "# end of $last_package\::$subname\n1;\n" if $last_package; $subname = $1; my $proto = $2 || ''; @@ -329,18 +331,19 @@ sub autosplit_file { my($lpath) = catfile($modnamedir, "$lname.al"); my($spath) = catfile($modnamedir, "$sname.al"); my $path; - if (!$Is83 and open(OUT, ">$lpath")){ + + if (!$Is83 and open($out, ">$lpath")){ $path=$lpath; print " writing $lpath\n" if ($Verbose>=2); } else { - open(OUT, ">$spath") or die "Can't create $spath: $!\n"; + open($out, ">$spath") or die "Can't create $spath: $!\n"; $path=$spath; print " writing $spath (with truncated name)\n" if ($Verbose>=1); } push(@outfiles, $path); my $lineno = $fnr - @cache; - print OUT <<EOT; + print $out <<EOT; # NOTE: Derived from $filename. # Changes made here will be lost when autosplit is run again. # See AutoSplit.pm. @@ -348,30 +351,30 @@ package $this_package; #line $lineno "$filename (autosplit into $path)" EOT - print OUT @cache; + print $out @cache; @cache = (); $caching = 0; } if($caching) { push(@cache, $_) if @cache || /\S/; } else { - print OUT $_; + print $out $_; } if(/^\}/) { if($caching) { - print OUT @cache; + print $out @cache; @cache = (); } - print OUT "\n"; + print $out "\n"; $caching = 1; } $last_package = $this_package if defined $this_package; } if ($subname) { - print OUT @cache,"1;\n# end of $last_package\::$subname\n"; - close(OUT); + print $out @cache,"1;\n# end of $last_package\::$subname\n"; + close($out); } - close(IN); + close($in); if (!$keep){ # don't keep any obsolete *.al files in the directory my(%outfiles); @@ -391,8 +394,8 @@ EOT $outdirs{File::Basename::dirname($_)}||=1; } for my $dir (keys %outdirs) { - opendir(OUTDIR,$dir); - foreach (sort readdir(OUTDIR)){ + opendir(my $outdir,$dir); + foreach (sort readdir($outdir)){ next unless /\.al\z/; my($file) = catfile($dir, $_); $file = lc $file if $Is83 or $Is_VMS; @@ -402,25 +405,25 @@ EOT do { $deleted += ($thistime = unlink $file) } while ($thistime); carp "Unable to delete $file: $!" unless $deleted; } - closedir(OUTDIR); + closedir($outdir); } } - open(TS,">$al_idx_file") or + open(my $ts,">$al_idx_file") or carp "AutoSplit: unable to create timestamp file ($al_idx_file): $!"; - print TS "# Index created by AutoSplit for $filename\n"; - print TS "# (file acts as timestamp)\n"; + print $ts "# Index created by AutoSplit for $filename\n"; + print $ts "# (file acts as timestamp)\n"; $last_package = ''; for my $fqs (@subnames) { my($subname) = $fqs; $subname =~ s/.*:://; - print TS "package $package{$fqs};\n" + print $ts "package $package{$fqs};\n" unless $last_package eq $package{$fqs}; - print TS "sub $subname $proto{$fqs};\n"; + print $ts "sub $subname $proto{$fqs};\n"; $last_package = $package{$fqs}; } - print TS "1;\n"; - close(TS); + print $ts "1;\n"; + close($ts); _check_unique($filename, $Maxlen, 1, @outfiles); |