http://qs321.pair.com?node_id=11132911


in reply to Perl 5.34 is released

A first class try/catch will be nice if it becomes a permanent feature, but I love

# qr/{,n}/ is now accepted
Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

Replies are listed 'Best First'.
Re^2: Perl 5.34 is released (bad code example)
by LanX (Saint) on May 23, 2021 at 12:14 UTC

    # qr/{,n}/ is now accepted

    I find this code very unfortunate, what does it mean if the empty string can be repeated n times?

    This could better be either a syntax error. But I'm rather expecting Perl not reading the curlies as metas.

    from the delta

    An empty lower bound is now accepted for regular expression quantifiers, like {,3}.

    so {,3} is the same like {0,3} or {1,3} ?

    please elaborate!

    edit

    to demonstrate my point

    DB<8> $re = qr/{0,3}/ DB<9> p "" =~ $re DB<10> p "{0,3}" =~ $re 1 DB<11> p $] 5.032001 DB<12> DB<13> use warnings; use strict; my $re = qr/{,3}/ DB<14>

    the curlies are taken literally!

    qr/{,3}/ was always allowed.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

        Discussing "very unfortunate" and "bad" code examples is hardly "hair splitting".

        We both are experienced enough to handle this, but many others won't.

        ...documentation can include sloppy wording, that's hard to avoid.

        But sloppy code is not a good idea, since there is no doubt of interpretation.

        I'll file a perlbug.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery

      "qr/{,3}/ was always allowed"

      Nope.

      $ perl -E 'say $]' 5.032001
      $ perl -Mstrict -wE 'my $str = "foobar"; say 1 if $str =~ /[o]{1,2}/' 1
      $ perl -Mstrict -wE 'my $str = "foobar"; say 1 if $str =~ /[o]{,2}/' Unescaped left brace in regex is illegal here in regex; marked by <-- +HERE in m/[o]{ <-- HERE ,2}/ at -e line 1.


      The way forward always starts with a minimal test.
        > $str =~ /[o]{,2}/'

        missing the point!

        Already proven in the post you downvoted (line 13)

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery