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}; }