@@ -, +, @@ --------- -- script will fail. -- script will now pass --- misc/maintenance/generate_MARC21Languages.pl | 71 +++++++++++++++++++--------- 1 file changed, 48 insertions(+), 23 deletions(-) --- a/misc/maintenance/generate_MARC21Languages.pl +++ a/misc/maintenance/generate_MARC21Languages.pl @@ -22,6 +22,7 @@ use Modern::Perl; use XML::Simple; use Pod::Usage; use Getopt::Long; +use Carp; use open ':std', ':encoding(UTF-8)'; @@ -37,26 +38,54 @@ my $outfile; my $tempfile = '/tmp/languages.xml'; GetOptions( - 'o|output:s' => \$outfile, - 'url:s' => \$sourceurl, - 'help|h' => \$help, + 'o|output:s' => \$outfile, + 'url:s' => \$sourceurl, + 'help|h' => \$help, ); usage() if $help; -# output log or STDOUT -if (defined $outfile) { - open (OUT, ">$outfile") || die ("Cannot open output file"); -} else { - open(OUT, ">&STDOUT") || die ("Couldn't duplicate STDOUT: $!"); -} - -system( qq{/usr/bin/wget $sourceurl -O $tempfile } ) == 0 or die "Can't wget $sourceurl ($?)"; +system(qq{/usr/bin/wget $sourceurl -O $tempfile }) == 0 + or croak "Can't wget $sourceurl ($?)"; -my $ref = XMLin($tempfile); +my $ref = XMLin($tempfile); my $languages = $ref->{'languages'}->{'language'}; -print OUT <', $outfile ) || croak("Cannot open output file"); +} +else { + open( $out_handle, ">&STDOUT" ) || croak("Couldn't duplicate STDOUT: $!"); +} +generate_header($out_handle); +generate_body($out_handle, $languages); +generate_footer($out_handle); +close $out_handle; + +sub generate_body { + my ( $file_handle, $language_list ) = @_; + + foreach my $l ( @{$language_list} ) { + my $code = $l->{'code'}; + my $name = ( + ref( $l->{'name'} ) eq 'HASH' + ? $l->{'name'}{'content'} + : $l->{'name'} + ); + next if ( ref($code) eq 'HASH' && $code->{'status'} eq 'obsolete' ); + print {$file_handle} " "; + print {$file_handle} "$name"; + print {$file_handle} ""; + print {$file_handle} "\n"; + } + return; +} + +sub generate_header { + my ($file_handle) = @_; + print {$file_handle} <<"HEADER"; ]> @@ -65,18 +94,12 @@ print OUT < HEADER - -foreach my $l (@{$languages}) { - my $code = $l->{'code'}; - my $name = (ref($l->{'name'}) eq 'HASH' ? $l->{'name'}{'content'} : $l->{'name'}); - next if (ref($code) eq 'HASH' && $code->{'status'} eq 'obsolete'); - print OUT " "; - print OUT "$name"; - print OUT ""; - print OUT "\n"; + return; } -print OUT < Unknown language code @@ -84,6 +107,8 @@ print OUT < FOOTER + return; +} =head1 NAME --