in reply to Not-really variable length lookbehind
Before lookbehind assertions were invented, there already existed code to calculate the minimum and maximum possible matching lengths of a subpattern, used by the optimiser (eg to bail out of the match before starting when the target string is too short). When support for lookbehind was added, the check was added in the simplest possible way: check that the minimum and maximum possible match lengths are the same.
The restriction could be relaxed in several ways given some slightly more intelligent code support. Your example of alternation is one such, and another one is backreferences (since their length is always fixed by the time it is needed):
"aabbaababb" =~ /(a+).*(?<=\1)b/; # should match "aabbaab"
The regular expression engine is due for a bit of an overhaul during the development of perl-5.10.0, and we may see some improvements in this area as a part of that if they can be fitted in without slowing down patterns that don't use lookbehinds.
For your example, prepending dots may be inaccurate if the non-digits could be near the beggining of the string. I'd suggest moving the alternation outwards instead:
Hugo(?:(?<=199\d|200\d)|(?<=\D))
|
|---|