I don't understand your requirements. It now seems to me none of the examples is correct, as TEST and TEST_test don't contain at least one digit, and TEST-1 doesn't contain at least one underscore. Changing the dash to underscore in the last makes it pass:
#!/usr/bin/perl
use warnings;
use strict;
while (<DATA>) {
if (my ($alnum, $constrained)
= /^foo # "foo"
_ # followed by "underscore"
(?:bar|test) # followed by "bar|test" (bar or test)
_ # followed by "underscore"
((?:\w+\.)+?) # followed by alhpnum string with
# dot at end (like foo10.1.1.1)
\1? # followed by one or zero occurences
# of same alhpnum string (like
# foo10.1.1.1) followed by dot
(\w{1,10}) # followed by 1-10 characters,
# containing at least one digit and
# one letter and underscore (e.g.
# TEST_test, TEST_test2,
# TEST1_test2)
\.txt$ # ends with .txt
/x) {
print "<$alnum | $constrained> $. ok\n"
if 3 == grep $constrained =~ $_,
qr/_/, qr/\d/, qr/[[:alpha:]]/;
}
}
__DATA__
foo_bar_foo10.1.1.1.TEST.txt
foo_test_foo10.1.1.1.foo10.1.1.1.TEST_test.txt
foo_test_foo10.1.1.1.foo10.1.1.1.txt
foo_test_foo10.1.1.1.foo10.1.1.1.TEST-1.txt
foo_test_foo10.1.1.1.foo10.1.1.1.TEST_1.txt
Note that I changed the quantifier in the first capturing group to frugal to avoid matching both occurrences of $alnum as one without repetition. Nevertheless, in the third case, the whole substring foo10.1.1.1.foo10.1.1. corresponds to $alnum, it's not repeated, and $constrained is just 1 .
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,