in reply to An Exegesis 4 thought

Probably because pop and shift still need to be builtins because of their defaulting behaviour (and they don't necessarily default to the current topic either), and a language with builtin pop and shift would look very weird.

I don't doubt that there will be standard push and unshift methods on the builtin ARRAY class though.

Replies are listed 'Best First'.
Re: Re: An Exegesis 4 thought
by Anonymous Monk on Apr 08, 2002 at 05:08 UTC

    Will @_ then act as the default array in Perl 6? I wasn't sure about this, given how references have thus far been described.

    Could the default behavior possibly be dealt with like the following? (assuming I'm remembering correctly that @_ is still going to be the default argument array for subrutines whse arguments haven't been otherwise specified)

    sub foo { my $bar = .shift // "some default"; my $baz = .pop // "some other default"; }

      I wonder why @_ in subs would still be needed. IIRC, you can write:

      sub foo ($bar //= "some default", $bar //= "blah") { ... }

      U28geW91IGNhbiBhbGwgcm90MTMgY
      W5kIHBhY2soKS4gQnV0IGRvIHlvdS
      ByZWNvZ25pc2UgQmFzZTY0IHdoZW4
      geW91IHNlZSBpdD8gIC0tIEp1ZXJk
      

        Oh I agree, but it seems the issue here is Perl 5 backwards compatibility.
        Ah. That one's easy. Consider the following snippet of Perl 5 code:
        sub foo { my $bar = shift; my %baz = @_; ... }
        If you get rid of @_ and the defaulting behaviour of shift/pop et al how do you do a programmatic conversion to Perl 6?

        Of course, once you've got it autoconverted to perl 6 you'd go through and change it to

        sub foo($bar, %baz) { ... }
        But having running code which you can test is important.