in reply to Re: Compiled regular expression using qr
in thread Compiled regular expression using qr

The comaprison is done in a framework subroutine, but it goes like this
my ($fsObj) = $HostA->find( type => 'DS', criteria => { name =>qr/^data_123$/i}, force_sync =>1, );

and in the frmeowrk routine

sub find { foreach my $k (keys %{$params{criteria}}) { my $objVal=$_[0]->getProperty($k);; my $critVal = $params{criteria}{$k}; if (defined $objVal) { return 0 if (!($self->_compareCriteria($objVal +,$critVal))); } } sub _compareCriteria { my ($self) = shift(@_); my ($objectVal, $critVal) = (@_); if (ref($critVal) eq 'Regexp') { return ($objectVal =~ $critVal) ? 1 : 0; }

Replies are listed 'Best First'.
Re^3: Compiled regular expression using qr
by GrandFather (Saint) on Oct 15, 2014 at 21:02 UTC

    So if I make small changes to allow the code to be run in a test harness I get:

    use strict; use warnings; my $HostA = bless {name => 'data_123'}; my ($fsObj) = $HostA->find( type => 'DS', criteria => {name => qr/^data_123$/i}, force_sync => 1, ); print $fsObj || 'not matched'; sub find { my ($self, %params) = @_; foreach my $k (keys %{$params{criteria}}) { my $objVal = $self->getProperty($k); my $critVal = $params{criteria}{$k}; if (defined $objVal) { return 0 if (!($self->_compareCriteria($objVal, $critVal)) +); } } return 'All matched'; } sub _compareCriteria { my ($self) = shift(@_); my ($objectVal, $critVal) = (@_); if (ref($critVal) eq 'Regexp') { return ($objectVal =~ $critVal) ? 1 : 0; } } sub getProperty { my ($self, $prop) = @_; return $self->{$prop}; }

    which prints:

    All matched

    Maybe you'd like to modify that to show the problem you see?

    Update: as an aside, this doesn't look like new code written by someone with an apparently limited understanding of regular expressions. Is this maintenance work by someone thrown in at the deep end perhaps?

    Perl is the programming world's equivalent of English