in reply to Compiled regular expression using qr

Show us test code with data that shows the problem. Most likely you are reading the string from STDIN and haven't chomped it.

Perl is the programming world's equivalent of English
  • Comment on Re: Compiled regular expression using qr

Replies are listed 'Best First'.
Re^2: Compiled regular expression using qr
by perlbaski (Sexton) on Oct 15, 2014 at 20:39 UTC
    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; }

      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