On Thu, Dec 22, 2005 at 04:47:21PM +0100, Michele Dondi wrote:
> This is not a substantial issue regarding Perl 6, but is more a minor 
> feature curiosity/meditation. It was inspired some time ago by this PM 
> node:
> http://perlmonks.org/?node_id=509310
> I was wondering if in addition to push(), pop() etc. there could be be 
> rot() and roll() methods that would act upon lists (not modifying them) 
> like thus:
> (qw/aa bb cc dd ee/).rot(2)   # qw/cc dd ee aa bb/
> (qw/aa bb cc dd ee/).rot()    # qw/bb cc dd ee aa/ => same as .rot(1)
> (qw/aa bb cc dd ee/).roll(2)  # qw/dd ee aa bb cc/ => same as .rot(-2)
> (qw/aa bb cc dd ee/).roll()   # qw/ee aa bb cc dd/ => same as .roll(1)

"rot" doesn't conjur the right stuff for me, sorry.

Since we already have shifting operators, why not just (re)use them?
If +< is "numeric" left shift, maybe @< is "array" left shift.
Of course, then you'd have to figure how to vary the wrapping

my @a = qw/aa bb cc dd ee/;
@a = @a @< 2;                   # or @a @<= 2;
my @b = @a @> 4;

Okay, I'm already not liking that syntax, but the idea is the same: we
have "shifting" ops, let capitalize on that meme.

> ...
> etc.
> Also I wonder if one will be able to push(), pop(), etc. array slices as 
> well whole arrays. A' la
> my @a=qw/aa bb cc dd ee/;
> my $s=pop @a[0..2];  # or [0,2] or just [0] for that matters!
> # $s='cc';
> # @a=qw/aa bb dd ee/; => same as what I can do with slice()
> Not terribly necessary, but indeed consistent IMHO.

Not quite sure why you'd want this, but if we have something like this:

my @a = qw/aa bb cc dd ee/;
my @slice :=  @a[0..2];
my $s = pop @slice;

(where @slice is a "reference" to part of @a) 

You get what you want and more.

Jonathan Scott Duff

Reply via email to