Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: using pop and shift to find the sum of an array

by johngg (Abbot)
on Sep 22, 2012 at 12:25 UTC ( #995098=note: print w/ replies, xml ) Need Help??


in reply to using pop and shift to find the sum of an array

You can randomly use pop and shift to remove elements one at a time from either end of your array and add them to the sum, doing this in a loop while there are still elements in the array. However, this obviously destroys your array.

$ perl -Mstrict -Mwarnings -E ' > my @arr = ( 1 .. 10 ); > my $sum; > $sum += int rand 2 ? shift @arr : pop @arr while @arr; > say $sum; > say qq{-> @arr <-};' 55 -> <- $

If, on the other hand, you wish to preserve your array, do the same thing in an on-the-fly subroutine with your array as the argument, which is passed into the subroutine as the @_ array (see perlvar and perlsub). The pop and shift functions inside a subroutine operate on @_ by default, leaving your @arr array untouched.

$ perl -Mstrict -Mwarnings -E ' > my @arr = ( 1 .. 10 ); > my $sum = sub { > my $sum; > $sum += int rand 2 ? shift : pop while @_; > return $sum; > }->( @arr ); > say $sum; > say qq{-> @arr <-};' 55 -> 1 2 3 4 5 6 7 8 9 10 <- $

I hope this is helpful.

Update: Clarified the wording a little.

Cheers,

JohnGG


Comment on Re: using pop and shift to find the sum of an array
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (13)
As of 2015-07-06 20:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (83 votes), past polls