--- trunk/lib/Biblio/Isis.pm 2006/07/09 12:18:44 58 +++ trunk/lib/Biblio/Isis.pm 2006/07/10 12:01:04 62 @@ -7,7 +7,7 @@ BEGIN { use Exporter (); use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); - $VERSION = 0.21; + $VERSION = 0.22_2; @ISA = qw (Exporter); #Give a hoot don't pollute, do not export more than needed by default @EXPORT = qw (); @@ -89,6 +89,9 @@ }, debug => 1, join_subfields_with => ' ; ', + regexps => [ + 's/something/else/g', + ], ); Options are described below: @@ -126,6 +129,12 @@ option is included to support lagacy application written against version older than 0.21 of this module. By default, it disabled. See L. +=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 @@ -519,6 +528,9 @@ my $hash = $isis->to_hash({ mfn => 42, include_subfields => 1, + regexps => [ + 's/something/else/g', + ], }); Each option controll creation of hash: @@ -546,6 +558,10 @@ Define delimiter which will be used to join repeatable subfields. You can specify option here instead in L if you want to have per-record control. +=item regexpes + +Override C specified in L. + =back =cut @@ -562,6 +578,10 @@ $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 ] }; @@ -580,6 +600,16 @@ 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 @@ -785,6 +815,8 @@ =head1 SEE ALSO +L for CDS/ISIS manual appendix F, G and H which describe file format + OpenIsis web site L perl4lib site L