Re: What should /\08/ match and do?
[email protected] (karl williamson)
| Newsgroups | perl.perl5.porters |
|---|---|
| Message-ID | <[email protected]> |
karl williamson wrote:
> Abigail wrote:
>> On Fri, Jun 04, 2010 at 07:45:36AM -0600, karl williamson wrote:
>>> Abigail wrote:
>>>
>>> OK. What about '\0a' It doesn't warn currently. It is analogous
>>> to \08 but has a non-octal hex digit instead of a non-octal decimal
>>> digit. Should it warn?
>>
>>
>> IMO, no. It doesn't now, and it's too easy to generate false warnings.
>> I also think it's very less likely to make a hexadecimal-instead-of-octal
>> error, then a digital-instead-of-octal error. After all, for most people
>> digital is what they've learned early in life. As Nick said, warning on
>> \08 makes sense, as it may happen because someone added 1 to \07,
>> forgetting
>> about the octal issue.
>> Heck, we don't even warn (and we shouldn't start now, I may add) on
>> /\xabc/.
>>
>>
>> Abigail
>>
>
> OK. I think we have agreement. I'll recap to give people another
> chance to disagree, but first, am I overlooking something if I change
> the docs to say that using 3 digits always for \OOO causes the
> ambiguities to completely go away, including concatenation of strings to
> form larger patterns, as long as there are fewer than 64 (= \100)
> capture groups?
Never mind on this. I hit send a little too soon. Just a little more
thought brought out what perhaps should have been more obvious: begin
your numbers with 0 and they won't be considered backreferences; but
what you think might be backreferences can turn into octal characters by
concatenation.
>
> So here's what I'm planning:
>
> Existing Behavior Changes
> [\8\9] will mean [89] instead of [89\000].
> The current wrong warning "Illegal octal digit
> ignored" will change to "Unrecognized escape"
>
> \400 and above in one context now generates a
> deprecated message and is taken modulo \400.
> It wil will now mean \x{100} and above, with
> no warning. This matches behavior in all other
> places except -0 on the command line.
>
> \o{...} will now generate an octal constant
> instead of the literal o{...} and the
> "Unrecognized escape" warning on the 'o'
>
> \o not followed by a { will now be a syntax
> error instead of "Unrecognized escape" warning
> on the 'o'
>
> Additional warning message changes
> \08 \009 will generate a new message instead of
> the existing wrong "Illegal octal digit ignored".
> I'm thinking: "Too few digits in octal character
> constant; assuming you meant '\\%04d'".
>
> Documentation will be updated, including saying that -0400 and above on
> the command line means the same as -0777 currently does.
>