In article <[EMAIL PROTECTED]>,
 [EMAIL PROTECTED] (Jose Alves De Castro) writes:
>Yesterday, a friend of mine was toying around with some Perl code, when
>he got to a function which would only accept a regular expression. He
>said:
>
>"How can I say that I want every single year after the one I have? It's
>impossible..."
>
>To which I replied:
>
>"Nothing is impossible! Especially in Perl! ;-) " (ok, maybe these
>weren't my words at the time, but they seem cool now, right? :-) )
>
>So after a couple of minutes, this is what I came up with:
>
>
>$year = 2004; # I'm stating it directly to improve clarity
>
>$year =~/(\d)(\d)(\d)(\d)/;
>
>($c,$d,$e,$f) = ($4+1,$3+1,$2+1,$1+1);
>
>$regex =
>qr/^\d*(?:${1}${2}${3}[$c-9]|${1}$2[$d-9]\d|$1[$e-9]\d{2}|[$f-9]\d{3})$/;
>
>
>and that does the trick :-)
>
>Thought I should share this with you guys :-) Thoughts are welcome :-)
>
>
>BTW: This was made so it would work with $year consisting of four
>digits... any care to make it generic? :-)

Maybe this is pooping at your party, but it seems to me that

        $regex = qr/^(\d+)(??{ $1 > $year ? "" : "(?!)" })$/

handles the generic case as well.

-- 
Peter Scott
http://www.perldebugged.com/
*** NEW *** http://www.perlmedic.com/

Reply via email to