* Winter Christian <[EMAIL PROTECTED]> [2004-06-01 16:31]:
> Another approach:
> 
> use re 'eval';
> my $re = qr/(\d{4})(??{ $1>$year?'':'x{1000}' })$/;
> 
> Assuming, of course, that $_ never contains a smaller year
> number followed by thousand 'x'es. :-)

You can remove that limitation by replacing 'x{1000}' by '(?!)',
a zero-width negative lookahead, which *always* fails.

Your approach requires multiple regex compilation, too -- the
regex returned by your code is compiled in at run time.

If you do want to go down that route, I'd rather do it like this:

    my $re = qr/(\d{4})(?(?{ $1 <= $year })(?!))/;

which uses a conditional subexpression (?(cond)if-true), where
the condition is a Perl expression (?{ $1 <= $year }), to force
failure using the aforementioned (?!), if the condition is true
(which means I must test for less-than-or-equal, where you test
for greater-than).

-- 
Regards,
Aristotle
 
"If you can't laugh at yourself, you don't take life seriously enough."

Reply via email to