Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Apocalypse 3

by blakem (Monsignor)
on Oct 04, 2001 at 02:14 UTC ( [id://116586]=note: print w/replies, xml ) Need Help??


in reply to Apocalypse 3

I grepped it for the forbidden information that put my life in jeopardy a few days ago:

    Binary //
    A binary // operator is the defaulting operator. That is:

    $a // $b
    is short for:

    defined($a) ?? $a :: $b # [note: this is the new ?: -- bla +kem]
    except that the left side is evaluated only once. It will work on arrays and hashes as well as scalars. It also has a corresponding assignment operator, which only does the assignment if the left side is undefined:
    $pi //= 3;
That's actually quite cool... currently when people use $a ||= b they often times really mean $a = defined ($a) ? $a : $b and now we'll have an easy way to do it..

//= gets a ++ in my book

-Blake

Replies are listed 'Best First'.
Re: Re: Apocalypse 3
by pixel (Scribe) on Oct 04, 2001 at 12:10 UTC

    So we finally get the hook operator as debated on p5p a long while ago. Thank you Larry :-)

    Blessed Be
    The Pixel

Re: Re: Apocalypse 3
by MrNobo1024 (Hermit) on Oct 04, 2001 at 02:53 UTC
    What if you want to divide by a regex? That could also have two slashes after a term.
      Perl might try to correct the parsing of:
      $x = $y //foo/;
      from
      $x = $y // foo/;
      to
      $x = $y / /foo/;

      _____________________________________________________
      Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
      s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;

        Perl might try to correct the parsing of:

        $x = $y //foo/;

        That will depend on how the Perl 6 parser works. If it pre-tokenizes (like Perl 5 does) then we shall almost certainly still have a "longest interpretation possible" tokenizing rule. So:

        $x = $y //foo/;

        will have to be interpreted as:

        $x = $y // foo/;

        But if (as I hope) we tokenize on-the-fly, then the parser will be able to backtrack this incorrect interpretation and re-parse it as:

        $x = $y / /foo/;

        instead.

        Indeed, if that is the parsing strategy, the issue here would never even arise, since the higher precedence of / over // would see that interpretation considered first. (Of course, there would be backtracking when compiling:

        $x = $y //foo;

        in that case, since the higher precedence interpretation doesn't work.)

        Personally, I think JIT tokenization will be the only feasible approach for Perl 6, given how mutable the language will be (e.g. user-defined operators).

        And, almost as a happy by-product, that is likely to inject the maximum degree of DWIMity into the language.

        Damian

      /// or // should be more like s/// or m//

      but what is $foo // or $brr /// (nothing if i remember correctly)

       $foo // expr has nothing to do with regex

      oh "divide" by a regex, mmmkay, maybe something like

      $_ = "2k4"; print ( 49 / /\d/); #?

      (i can't see how what you're suggesting can occur, or i'm misunderstanding)

      Can you give one example where dividing by a regexp is not hopelessly obfuscatory? If I saw someone trying to do that in production code, I would hesitate between shooting them first and then throwing them out the window, or doing it the other way around :)

      Although I would be slightly more worried about the ambiguity between // "that unless defined this" and // "rematch according to the last successfully compiled regexp" (although maybe that's going away in Perl 6, I've lost track). And anyway, I'll let Larry and Damian worry about that for the time being.

      --
      g r i n d e r

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://116586]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2024-04-19 11:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found