7 |
BEGIN { |
BEGIN { |
8 |
use Exporter (); |
use Exporter (); |
9 |
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); |
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); |
10 |
$VERSION = 0.22; |
$VERSION = 0.23; |
11 |
@ISA = qw (Exporter); |
@ISA = qw (Exporter); |
12 |
#Give a hoot don't pollute, do not export more than needed by default |
#Give a hoot don't pollute, do not export more than needed by default |
13 |
@EXPORT = qw (); |
@EXPORT = qw (); |
139 |
|
|
140 |
croak "new needs database name (isisdb) as argument!" unless ({@_}->{isisdb}); |
croak "new needs database name (isisdb) as argument!" unless ({@_}->{isisdb}); |
141 |
|
|
142 |
foreach my $v (qw{isisdb debug include_deleted hash_filter}) { |
foreach my $v (qw{isisdb debug include_deleted hash_filter join_subfields_with}) { |
143 |
$self->{$v} = {@_}->{$v}; |
$self->{$v} = {@_}->{$v} if defined({@_}->{$v}); |
144 |
} |
} |
145 |
|
|
146 |
my @isis_files = grep(/\.(FDT|MST|XRF|CNT)$/i,glob($self->{isisdb}."*")); |
my @isis_files = grep(/\.(FDT|MST|XRF|CNT)$/i,glob($self->{isisdb}."*")); |
548 |
Define delimiter which will be used to join repeatable subfields. You can |
Define delimiter which will be used to join repeatable subfields. You can |
549 |
specify option here instead in L</new> if you want to have per-record control. |
specify option here instead in L</new> if you want to have per-record control. |
550 |
|
|
551 |
|
=item hash_filter |
552 |
|
|
553 |
|
You can override C<hash_filter> defined in L</new> using this option. |
554 |
|
|
555 |
=back |
=back |
556 |
|
|
557 |
=cut |
=cut |
563 |
my $mfn = shift || confess "need mfn!"; |
my $mfn = shift || confess "need mfn!"; |
564 |
my $arg; |
my $arg; |
565 |
|
|
566 |
|
my $hash_filter = $self->{hash_filter}; |
567 |
|
|
568 |
if (ref($mfn) eq 'HASH') { |
if (ref($mfn) eq 'HASH') { |
569 |
$arg = $mfn; |
$arg = $mfn; |
570 |
$mfn = $arg->{mfn} || confess "need mfn in arguments"; |
$mfn = $arg->{mfn} || confess "need mfn in arguments"; |
571 |
|
$hash_filter = $arg->{hash_filter} if ($arg->{hash_filter}); |
572 |
} |
} |
573 |
|
|
574 |
# init record to include MFN as field 000 |
# init record to include MFN as field 000 |
576 |
|
|
577 |
my $row = $self->fetch($mfn) || return; |
my $row = $self->fetch($mfn) || return; |
578 |
|
|
579 |
my $j_rs = $arg->{join_subfields_with}; |
my $j_rs = $arg->{join_subfields_with} || $self->{join_subfields_with}; |
580 |
$j_rs = $self->{join_subfields_with} unless(defined($j_rs)); |
$j_rs = $self->{join_subfields_with} unless(defined($j_rs)); |
581 |
my $i_sf = $arg->{include_subfields}; |
my $i_sf = $arg->{include_subfields}; |
582 |
|
|
584 |
foreach my $l (@{$row->{$f_nr}}) { |
foreach my $l (@{$row->{$f_nr}}) { |
585 |
|
|
586 |
# filter output |
# filter output |
587 |
if ($self->{'hash_filter'}) { |
$l = $hash_filter->($l, $f_nr) if ($hash_filter); |
588 |
$l = $self->{'hash_filter'}->($l, $f_nr); |
next unless defined($l); |
|
next unless defined($l); |
|
|
} |
|
589 |
|
|
590 |
my $val; |
my $val; |
591 |
my $r_sf; # repeatable subfields in this record |
my $r_sf; # repeatable subfields in this record |
599 |
next if (! $t); |
next if (! $t); |
600 |
my ($sf,$v) = (substr($t,0,1), substr($t,1)); |
my ($sf,$v) = (substr($t,0,1), substr($t,1)); |
601 |
# XXX this might be option, but why? |
# XXX this might be option, but why? |
602 |
next unless ($v); |
next unless (defined($v) && $v ne ''); |
603 |
# warn "### $f_nr^$sf:$v",$/ if ($self->{debug} > 1); |
# warn "### $f_nr^$sf:$v",$/ if ($self->{debug} > 1); |
604 |
|
|
605 |
if (ref( $val->{$sf} ) eq 'ARRAY') { |
if (ref( $val->{$sf} ) eq 'ARRAY') { |
751 |
As this is young module, new features are added in subsequent version. It's |
As this is young module, new features are added in subsequent version. It's |
752 |
a good idea to specify version when using this module like this: |
a good idea to specify version when using this module like this: |
753 |
|
|
754 |
use Biblio::Isis 0.21 |
use Biblio::Isis 0.23 |
755 |
|
|
756 |
Below is list of changes in specific version of module (so you can target |
Below is list of changes in specific version of module (so you can target |
757 |
older versions if you really have to): |
older versions if you really have to): |
758 |
|
|
759 |
=over 8 |
=over 8 |
760 |
|
|
761 |
|
=item 0.23 |
762 |
|
|
763 |
|
Added C<hash_filter> to L</to_hash> |
764 |
|
|
765 |
|
Fixed bug with documented C<join_subfields_with> in L</new> which wasn't |
766 |
|
implemented |
767 |
|
|
768 |
=item 0.22 |
=item 0.22 |
769 |
|
|
770 |
Added field number when calling C<hash_filter> |
Added field number when calling C<hash_filter> |