--- trunk/lib/WebPAC/Input.pm 2006/08/23 11:04:32 613 +++ trunk/lib/WebPAC/Input.pm 2006/08/25 12:31:06 619 @@ -16,11 +16,11 @@ =head1 VERSION -Version 0.10 +Version 0.11 =cut -our $VERSION = '0.10'; +our $VERSION = '0.11'; =head1 SYNOPSIS @@ -254,26 +254,7 @@ ## FIXME remove this warning when we are sure that none of API is calling ## this wrongly - #warn "filter called without field number" unless ($f_nr); - - return $l unless ($rec_regex && $f_nr); - -# my $max_regex = 100; - - # apply regexps - if ($rec_regex && defined($rec_regex->{$f_nr})) { - $log->logconfess("regexps->{$f_nr} must be ARRAY") if (ref($rec_regex->{$f_nr}) ne 'ARRAY'); - my $c = 0; - foreach my $r (@{ $rec_regex->{$f_nr} }) { - #$log->debug("\$l = $l\neval \$l =~ $r"); - eval '$l =~ ' . $r; - $log->error("error applying regex: $r") if ($@); - -# while ( $c < $max_regex && eval '$l =~ ' . $r ) { $c++ }; -# $log->error("field $f_nr has more than $max_regex regex iterations\n\$l = $l\neval \$l =~ $r") if ($c == $max_regex); - - } - } + warn "filter called without field number" unless ($f_nr); return $l; }, @@ -316,7 +297,24 @@ $log->debug("position: $pos\n"); - my $rec = $self->{fetch_rec}->($self, $db, $pos ); + my $rec = $self->{fetch_rec}->($self, $db, $pos, sub { + my ($l,$f_nr) = @_; + return unless defined($l); + return $l unless ($rec_regex && $f_nr); + + # apply regexps + if ($rec_regex && defined($rec_regex->{$f_nr})) { + $log->logconfess("regexps->{$f_nr} must be ARRAY") if (ref($rec_regex->{$f_nr}) ne 'ARRAY'); + my $c = 0; + foreach my $r (@{ $rec_regex->{$f_nr} }) { + #$log->debug("\$l = $l\neval \$l =~ $r"); + eval '$l =~ ' . $r; + $log->error("error applying regex: $r") if ($@); + } + } + + return $l; + }); $log->debug(sub { Dumper($rec) }); @@ -338,6 +336,9 @@ # update counters for statistics if ($self->{stats}) { + # fetch clean record with regexpes applied for statistics + my $rec = $self->{fetch_rec}->($self, $db, $pos); + foreach my $fld (keys %{ $rec }) { $self->{_stats}->{fld}->{ $fld }++; @@ -349,6 +350,7 @@ if (ref($row) eq 'HASH') { foreach my $sf (keys %{ $row }) { + next if ($sf eq 'subfields'); $self->{_stats}->{sf}->{ $fld }->{ $sf }->{count}++; $self->{_stats}->{sf}->{ $fld }->{ $sf }->{repeatable}++ if (ref($row->{$sf}) eq 'ARRAY');