--- trunk/lib/WebPAC/Normalize.pm 2006/07/03 21:08:07 574 +++ trunk/lib/WebPAC/Normalize.pm 2006/07/09 15:22:30 592 @@ -35,11 +35,11 @@ =head1 VERSION -Version 0.10 +Version 0.12 =cut -our $VERSION = '0.10'; +our $VERSION = '0.12'; =head1 SYNOPSIS @@ -326,7 +326,7 @@ warn "## saved/3 ", dump( $field ),$/ if ($debug); } - return @m; + return \@m; } =head2 _debug @@ -504,6 +504,8 @@ my ($i1,$i2) = defined($marc_indicators->{$f}) ? @{ $marc_indicators->{$f} } : (' ',' '); my $m = [ $f, $i1, $i2 ]; + warn "### marc_compose input subfields = ", dump(@_),$/ if ($debug > 2); + while (@_) { my $sf = shift or die "marc_compose $f needs subfield"; my $v = shift; @@ -514,7 +516,7 @@ warn "## ++ marc_compose($f,$sf,$v) ", dump( $m ),$/ if ($debug > 1); } - warn "## marc_compose(d) ", dump( $m ),$/ if ($debug > 1); + warn "## marc_compose current marc = ", dump( $m ),$/ if ($debug > 1); push @{ $marc_record->[ $marc_record_offset ] }, $m if ($#{$m} > 2); } @@ -565,7 +567,8 @@ warn "### marc_remove before = ", dump( $marc ), $/ if ($debug > 2); - foreach my $i ( 0 .. $#{ $marc } ) { + my $i = 0; + foreach ( 0 .. $#{ $marc } ) { last unless (defined $marc->[$i]); warn "#### working on ",dump( @{ $marc->[$i] }), $/ if ($debug > 3); if ($marc->[$i]->[0] eq $f) { @@ -591,6 +594,7 @@ } } } + $i++; } warn "### marc_remove($f", $sf ? ",$sf" : "", ") after = ", dump( $marc ), $/ if ($debug > 2); @@ -645,7 +649,13 @@ my $f = shift; return unless (defined($rec && $rec->{$f})); my $sf = shift; - return map { $_->{$sf} } grep { ref($_) eq 'HASH' && $_->{$sf} } @{ $rec->{$f} }; + return map { + if (ref($_->{$sf}) eq 'ARRAY') { + @{ $_->{$sf} }; + } else { + $_->{$sf}; + } + } grep { ref($_) eq 'HASH' && $_->{$sf} } @{ $rec->{$f} }; } =head2 rec @@ -658,10 +668,16 @@ =cut sub rec { + my @out; if ($#_ == 0) { - return rec1(@_); + @out = rec1(@_); } elsif ($#_ == 1) { - return rec2(@_); + @out = rec2(@_); + } + if (@out) { + return @out; + } else { + return ''; } } @@ -694,7 +710,7 @@ =cut sub prefix { - my $p = shift or die "prefix needs string as first argument"; + my $p = shift or return; return map { $p . $_ } grep { defined($_) } @_; } @@ -767,7 +783,10 @@ sub join_with { my $d = shift; - return join($d, grep { defined($_) && $_ ne '' } @_); + warn "### join_with('$d',",dump(@_),")\n" if ($debug > 2); + my $v = join($d, grep { defined($_) && $_ ne '' } @_); + return '' unless defined($v); + return $v; } =head2 split_rec_on