BEGIN {
use Exporter ();
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
- $VERSION = 0.22_1;
+ $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}."*"));
my $hash = $isis->to_hash({
mfn => 42,
include_subfields => 1,
- regexps => [
- 's/something/else/g',
- ],
});
Each option controll creation of hash:
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});
}
- confess "regexps must be HASH" if ($arg->{regexps} && ref($arg->{regexps}) ne 'HASH');
-
# init record to include MFN as field 000
my $rec = { '000' => [ $mfn ] };
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);
- }
-
- # apply regexps
- if ($arg->{regexps} && defined($arg->{regexps}->{$f_nr})) {
- confess "regexps->{$f_nr} must be ARRAY" if (ref($arg->{regexps}->{$f_nr}) ne 'ARRAY');
- my $c = 0;
- foreach my $r (@{ $arg->{regexps}->{$f_nr} }) {
- while ( eval '$l =~ ' . $r ) { $c++ };
- }
- warn "## field $f_nr triggered $c regexpes\n" if ($c && $self->{debug});
- }
+ $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>.