If you felt brave enough you could combine the above with tie and then make all the tests transparent to your program.
A try (untested)
package Tie::Match;
use strict;
sub TIESCALAR {
my ($class, $regex) = @_;
return bless [undef, $regex], $class;
}
sub STORE {
my ($self, $new) = @_;
$self->[0] = $new =~ $self->[1] ? $new : undef;
}
sub FETCH {
my ($self) = @_;
return $_->[0];
}
sub UNTIE { }
sub DESTROY { }
__END__
=head1 NAME
Tie::Match - Tie a scalar that is undef when not matching a regex
=head1 SYNOPSIS
tie my $scalar, 'Tie::Match', qr/^[1-5]+$/;
while ($scalar = <>) {
if (defined $scalar) {
print "Match: $scalar\n";
} else {
print "No match.\n";
}
}
=head1 DESCRIPTION
Ties a scalar. The scalar can be set, but will be undef if the
new value does not match the given regex.
=head1 URL
http://perlmonks.org/?node_id=157404
=cut
U28geW91IGNhbiBhbGwgcm90MTMgY
W5kIHBhY2soKS4gQnV0IGRvIHlvdS
ByZWNvZ25pc2UgQmFzZTY0IHdoZW4
geW91IHNlZSBpdD8gIC0tIEp1ZXJk
|