From 9abe8df835244b126f9f35257376381bdcb03437 Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Sun, 10 Oct 2010 18:14:08 -0600 Subject: mktables: Remove unshift onto large array This changes the parameters to write() so it can accept more than one array ref, thus eliminating the need for an unshift onto a large array. --- lib/unicore/mktables | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'lib') diff --git a/lib/unicore/mktables b/lib/unicore/mktables index 9d6a431a9e..04775deed8 100644 --- a/lib/unicore/mktables +++ b/lib/unicore/mktables @@ -4792,12 +4792,11 @@ sub trace { return main::trace(@_); } # should appear before it in the file. my $pre_body = $self->pre_body; push @HEADER, $pre_body, "\n" if $pre_body; - unshift @OUT, @HEADER; # All these files have a .pl suffix $file_path{$addr}->[-1] .= '.pl'; - main::write($file_path{$addr}, \@OUT); + main::write($file_path{$addr}, \@HEADER, \@OUT); return; } @@ -7511,19 +7510,14 @@ sub force_unlink ($) { return; } -sub write ($\@) { - # Given a filename and a reference to an array of lines, write the lines - # to the file +sub write ($@) { + # Given a filename and references to arrays of lines, write the lines of + # each array to the file # Filename can be given as an arrayref of directory names - my $file = shift; - my $lines_ref = shift; - Carp::carp_extra_args(\@_) if main::DEBUG && @_; + return Carp::carp_too_few_args(\@_, 2) if main::DEBUG && @_ < 2; - if (! defined $lines_ref) { - Carp::my_carp("Missing lines to write parameter for $file. Writing skipped;"); - return; - } + my $file = shift; # Get into a single string if an array, and get rid of, in Unix terms, any # leading '.' @@ -7536,10 +7530,6 @@ sub write ($\@) { push @files_actually_output, $file; - unless (@$lines_ref) { - Carp::my_carp("Output file '$file' is empty; writing it anyway;"); - } - force_unlink ($file); my $OUT; @@ -7548,7 +7538,13 @@ sub write ($\@) { return; } - print $OUT @$lines_ref or die Carp::my_carp("write to '$file' failed: $!"); + while (defined (my $lines_ref = shift)) { + unless (@$lines_ref) { + Carp::my_carp("An array of lines for writing to file '$file' is empty; writing it anyway;"); + } + + print $OUT @$lines_ref or die Carp::my_carp("write to '$file' failed: $!"); + } close $OUT or die Carp::my_carp("close '$file' failed: $!"); print "$file written.\n" if $verbosity >= $VERBOSE; @@ -12747,7 +12743,7 @@ L END # And write it. - main::write([ $pod_directory, "$pod_file.pod" ], @OUT); + main::write([ $pod_directory, "$pod_file.pod" ], \@OUT); return; } @@ -12808,7 +12804,7 @@ END 1; END - main::write("Heavy.pl", @heavy); + main::write("Heavy.pl", \@heavy); return; } -- cgit v1.2.1