initial implementation of split_on_delimiters functionality needed for
[Biblio-Isis] / lib / Biblio / Isis.pm
index cc144e2..6f29e20 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.21;
+       $VERSION     = 0.22_1;
        @ISA         = qw (Exporter);
        #Give a hoot don't pollute, do not export more than needed by default
        @EXPORT      = qw ();
@@ -519,6 +519,9 @@ 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:
@@ -562,6 +565,8 @@ sub to_hash {
                $mfn = $arg->{mfn} || confess "need mfn in arguments";
        }
 
+       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 ] };
 
@@ -580,6 +585,16 @@ sub to_hash {
                                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