I think it's simpler, the pattern isn't empty, because (?:...) is always part of the pattern. Meta characters count too.
This idiom is meant to be used as s//something/ in complicated parsing, kind of inherited from sed/awk IIRC.
You should also be aware that a genuinely empty pattern IS always matching. In your case the replacement is just invisible because empty.
So I'd rather prefer to make this explicit and self documenting
- s/$extra// if $extra
Nowadays I doubt there are more than a fraction of a percent of programmers knowing/using this feature.
I'd really like to see a Perl version/feature to switch it off by default.
| [reply] [d/l] [select] |
| [reply] [d/l] [select] |
| [reply] |
Thanks LanX. I agree that this feature should be off by default. I think it falls into the category of being a little TOO helpful, with the side effects being very difficult to pin down. I spent days trying to isolate the cause and came up empty until posing the question here. Thanks to everyone for your help.
"It's not how hard you work, it's how much you get done."
| [reply] |