in reply to Interactions of \Q, \U, \L and \E

One might expect ab\,cdEF\,GHij\,klMN\,OPqr\,stuv,wx

Not if one followed the documentation.
"\Qab,cd\Uef,gh\Lij,kl\Emn,op\Eqr,st\Euv,wx\n" Q-------------------- * * U------------- L------ * - Ends active transforms. There are none, so no-op.

Now, the documentation doesn't state what happens when both \U and \L are in effect, but Perl does what you'd expect (last one encountered rules).

"\Qab,cd\Uef,gh\Lij,kl\Emn,op\Eqr,st\Euv,wx\n" Q---------------------- * * U------L-------- | v "ab\\,cdEF\\,GHij\\,klmn,opqr,stuv,wx\n" * - Ends active transforms. There are none, so no-op.

Update: Wait! That's not what Perl gives. Argh, not my day. There's a bug :( (in the docs if not in the interpreter).

Replies are listed 'Best First'.
Re^2: Interactions of \Q, \U, \L and \E
by ig (Vicar) on Aug 25, 2009 at 15:56 UTC
    Wait! That's not what Perl gives. Argh, not my day. There's a bug :( (in the docs if not in the interpreter).

    What you described (\Q, \U and \L all being terminated at the next \E) is one of the more consistent alternatives to what perl actually does. It would be simpler to implement, document and understand. But, as you note, perl doesn't behave this way.

    $ perl -e 'print qq(\Qab,cd\Uef,gh\Lij,kl\Emn,op\Eqr,st\Euv,wx\n)' ab\,cdEF\,GHij\,klmn\,opqr,stuv,wx

    There isn't necessarily a bug (i.e. incorrect statement) in the documentation - it may be just an omission. It describes \Q, \U and \L separately. It doesn't say anything about what happens when they are nested or overlapped or concurrent(or however one might choose to describe the situation in the test case above). When used separately, they behave just as the documentation says they do.

      There isn't necessarily a bug (i.e. incorrect statement) in the documentation - it may be just an omission

      The docs says the conversion occurs until \E, but perl keeps going pass \E in some circumstances. Call it what you want.