BEGIN {
use Exporter ();
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
- $VERSION = 0.21;
+ $VERSION = 0.23;
@ISA = qw (Exporter);
#Give a hoot don't pollute, do not export more than needed by default
@EXPORT = qw ();
read_fdt => 1,
include_deleted => 1,
hash_filter => sub {
- my $v = shift;
+ my ($v,$field_number) = @_;
$v =~ s#foo#bar#g;
},
debug => 1,
=item hash_filter
-Filter code ref which will be used before data is converted to hash.
+Filter code ref which will be used before data is converted to hash. It will
+receive two arguments, whole line from current field (in C<< $_[0] >>) and
+field number (in C<< $_[1] >>).
=item debug
croak "new needs database name (isisdb) as argument!" unless ({@_}->{isisdb});
- foreach my $v (qw{isisdb debug include_deleted hash_filter}) {
- $self->{$v} = {@_}->{$v};
+ foreach my $v (qw{isisdb debug include_deleted hash_filter join_subfields_with}) {
+ $self->{$v} = {@_}->{$v} if defined({@_}->{$v});
}
my @isis_files = grep(/\.(FDT|MST|XRF|CNT)$/i,glob($self->{isisdb}."*"));
Define delimiter which will be used to join repeatable subfields. You can
specify option here instead in L</new> if you want to have per-record control.
+=item hash_filter
+
+You can override C<hash_filter> defined in L</new> using this option.
+
=back
=cut
my $mfn = shift || confess "need mfn!";
my $arg;
+ my $hash_filter = $self->{hash_filter};
+
if (ref($mfn) eq 'HASH') {
$arg = $mfn;
$mfn = $arg->{mfn} || confess "need mfn in arguments";
+ $hash_filter = $arg->{hash_filter} if ($arg->{hash_filter});
}
# init record to include MFN as field 000
my $row = $self->fetch($mfn) || return;
- my $j_rs = $arg->{join_subfields_with};
+ my $j_rs = $arg->{join_subfields_with} || $self->{join_subfields_with};
$j_rs = $self->{join_subfields_with} unless(defined($j_rs));
my $i_sf = $arg->{include_subfields};
foreach my $l (@{$row->{$f_nr}}) {
# filter output
- if ($self->{'hash_filter'}) {
- $l = $self->{'hash_filter'}->($l);
- next unless defined($l);
- }
+ $l = $hash_filter->($l, $f_nr) if ($hash_filter);
+ next unless defined($l);
my $val;
my $r_sf; # repeatable subfields in this record
next if (! $t);
my ($sf,$v) = (substr($t,0,1), substr($t,1));
# XXX this might be option, but why?
- next unless ($v);
+ next unless (defined($v) && $v ne '');
# warn "### $f_nr^$sf:$v",$/ if ($self->{debug} > 1);
if (ref( $val->{$sf} ) eq 'ARRAY') {
As this is young module, new features are added in subsequent version. It's
a good idea to specify version when using this module like this:
- use Biblio::Isis 0.21
+ use Biblio::Isis 0.23
Below is list of changes in specific version of module (so you can target
older versions if you really have to):
=over 8
+=item 0.23
+
+Added C<hash_filter> to L</to_hash>
+
+Fixed bug with documented C<join_subfields_with> in L</new> which wasn't
+implemented
+
+=item 0.22
+
+Added field number when calling C<hash_filter>
+
=item 0.21
Added C<join_subfields_with> to L</new> and L</to_hash>.
=head1 SEE ALSO
+L<Biblio::Isis::Manual> for CDS/ISIS manual appendix F, G and H which describe file format
+
OpenIsis web site L<http://www.openisis.org>
perl4lib site L<http://perl4lib.perl.org>