=head1 VERSION
-Version 0.05
+Version 0.06
=cut
-our $VERSION = '0.05';
+our $VERSION = '0.06';
=head1 SYNOPSIS
code defined as code ref on format after field substitution to producing
output
+There is one built-in filter called C<regex> which can be use like this:
+
+ filter{regex(s/foo/bar/)}
+
=item *
optional C<lookup{...}> will be then performed. See C<WebPAC::Lookups>.
$log->debug("using lookup regex: ", $self->{lookup_regex}) if ($r && $l);
+ if ($self->{filter} && ! $self->{filter}->{regex}) {
+ $log->debug("adding built-in filter regex");
+ $self->{filter}->{regex} = sub {
+ my ($val, $regex) = @_;
+ eval "\$val =~ $regex";
+ return $val;
+ };
+ }
+
$self ? return $self : return undef;
}
my $text = $webpac->parse($rec,'eval{"v901^a" eq "Deskriptor"}descriptor: v250^a', $i);
+Filters are implemented here. While simple form of filters looks like this:
+
+ filter{name_of_filter}
+
+but, filters can also have variable number of parametars like this:
+
+ filter{name_of_filter(param,param,param)}
+
=cut
sub parse {
return if (! $self->_eval($eval));
}
- if ($filter_name && $self->{'filter'}->{$filter_name}) {
- $log->debug("about to filter{$filter_name} format: $out");
- $out = $self->{'filter'}->{$filter_name}->($out);
- return unless(defined($out));
- $log->debug("filter result: $out");
+ if ($filter_name) {
+ my @filter_args;
+ if ($filter_name =~ s/(\w+)\((.*)\)/$1/) {
+ @filter_args = split(/,/, $2);
+ }
+ if ($self->{'filter'}->{$filter_name}) {
+ $log->debug("about to filter{$filter_name} format: $out with arguments: ", join(",", @filter_args));
+ unshift @filter_args, $out;
+ $out = $self->{'filter'}->{$filter_name}->(@filter_args);
+ return unless(defined($out));
+ $log->debug("filter result: $out");
+ } else {
+ $log->warn("trying to use undefined filter $filter_name");
+ }
}
return $out;