You would definitely want more than just the pattern you are searching for, especially when processing a form. I will normally also search for some anchors in the form fields.
use strict;
use warnings;
use Data::Dumper;
my @forms = (
{ name => 'Name: Roger',
address => 'Address: Melbourne',
phone => 'Telephone: 12345',
},
{ name => 'Name: Roger',
address => 'Address:',
phone => 'Telephone: 12345',
},
{ name => 'Name: Roger',
address => 'Address: Melbourne',
phone => 'Telephone: 54321',
},
);
my $m_name = 'Roger';
my $m_address = ''; # means don't care
my $m_phone = '12345';
for my $form (@forms) {
print Dumper($form);
if ($form->{name} =~ /Name:\s*?$m_name/ &&
$form->{address} =~ /Address:\s*?$m_address/ &&
$form->{phone} =~ /Telephone:\s*?$m_phone/)
{
print "Match\n";
} else {
print "Not match\n";
}
}
And the output -
$VAR1 = {
'address' => 'Address: Melbourne',
'phone' => 'Telephone: 12345',
'name' => 'Name: Roger'
};
Match
$VAR1 = {
'address' => 'Address:',
'phone' => 'Telephone: 12345',
'name' => 'Name: Roger'
};
Match
$VAR1 = {
'address' => 'Address: Melbourne',
'phone' => 'Telephone: 54321',
'name' => 'Name: Roger'
};
Not match
use strict;
use warnings;
use Data::Dumper;
my @forms = (
{ name => 'Roger',
address => 'Melbourne',
phone => '12345',
},
{ name => 'Roger',
address => '',
phone => '12345',
},
{ name => 'Roger',
address => 'Melbourne',
phone => '54321',
},
);
my $m_name = 'Roger';
my $m_address = ''; # means don't care
my $m_phone = '12345';
for my $form (@forms) {
print Dumper($form);
my ($t_name, $t_address, $t_phone) =
taint_fields($m_name, $m_address, $m_phone);
if ($form->{name} =~ /$t_name/ &&
$form->{address} =~ /$t_address/ &&
$form->{phone} =~ /$t_phone/)
{
print "Match\n";
} else {
print "Not match\n";
}
}
sub taint_fields {
return map { $_ ||= '.*' } @_;
}