Here's another approach, which I find clean and easy to maintain.
It uses named captures to label each alternative.
If the regex matches, the named capture hash (%+)
will have only a single key, which will be the label
of the alternative that matched.
This approach should be reasonably fast but, as others have said,
you'll definitely need to benchmark to find the most efficient
solution (which might even vary depending on which version
of Perl you're running).
use 5.010;
use strict;
use warnings;
my $CLASSIFIER = qr{
(?<date> \d{2}.\d{2}.\d{2} )
| (?<date> \d{2}.\d{2}.\d{4} )
| (?<RMTTC> [A-Z]{2}\d{9}[A-Z]{2} )
| (?<Visa> \d{16} )
| (?<EAN13> \d{13} )
}x;
while (my $input = <DATA>) {
chomp $input;
my $answer = $input =~ /^$CLASSIFIER$/ ? (keys %+)[0] : 'unknown';
print "$input is $answer\n";
}
__DATA__
12 12 17
09 30 2O17
09 30 2017
09 30 12017
123123123123123
1231231231231231
12312312312312312
456456456456
4564564564567
45645645645678
QW123456789WQ
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|