documented that hash filter gets also a field number [0.22]
[Biblio-Isis] / lib / Biblio / Isis.pm
index a7c73ed..405c47f 100644 (file)
@@ -7,7 +7,7 @@ use File::Glob qw(:globally :nocase);
 BEGIN {
        use Exporter ();
        use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-       $VERSION     = 0.22_2;
+       $VERSION     = 0.22;
        @ISA         = qw (Exporter);
        #Give a hoot don't pollute, do not export more than needed by default
        @EXPORT      = qw ();
@@ -84,14 +84,11 @@ Open ISIS database
        read_fdt => 1,
        include_deleted => 1,
        hash_filter => sub {
-               my $v = shift;
+               my ($v,$field_number) = @_;
                $v =~ s#foo#bar#g;
        },
        debug => 1,
        join_subfields_with => ' ; ',
-       regexps => [
-               's/something/else/g',
-       ],
  );
 
 Options are described below:
@@ -117,7 +114,9 @@ Don't skip logically deleted records in ISIS.
 
 =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
 
@@ -129,12 +128,6 @@ Define delimiter which will be used to join repeatable subfields. This
 option is included to support lagacy application written against version
 older than 0.21 of this module. By default, it disabled. See L</to_hash>.
 
-=item regexpes
-
-Define (any number) of regexpes to apply at field values before they are
-splitted into subfield. This is great place to split subfields in input to
-mulitple subfields if needed or rename subfields.
-
 =back
 
 =cut
@@ -528,9 +521,6 @@ There is also more elaborative way to call C<to_hash> like this:
   my $hash = $isis->to_hash({
        mfn => 42,
        include_subfields => 1,
-       regexps => [
-               's/something/else/g',
-       ],
   });
 
 Each option controll creation of hash:
@@ -558,10 +548,6 @@ have original record subfield order and index to that subfield like this:
 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 regexpes
-
-Override C<regexpes> specified in L</new>.
-
 =back
 
 =cut
@@ -578,10 +564,6 @@ sub to_hash {
                $mfn = $arg->{mfn} || confess "need mfn in arguments";
        }
 
-       $arg->{regexpes} ||= $self->{regexpes};
-
-       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 ] };
 
@@ -596,20 +578,10 @@ sub to_hash {
 
                        # filter output
                        if ($self->{'hash_filter'}) {
-                               $l = $self->{'hash_filter'}->($l);
+                               $l = $self->{'hash_filter'}->($l, $f_nr);
                                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});
-                       }
-
                        my $val;
                        my $r_sf;       # repeatable subfields in this record
 
@@ -781,6 +753,10 @@ older versions if you really have to):
 
 =over 8 
 
+=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>.