Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: Why does the first $c evaluate to the incremented value in [$c, $c += $_] ?

by Jenda (Abbot)
on Mar 05, 2014 at 10:01 UTC ( [id://1077059]=note: print w/replies, xml ) Need Help??


in reply to Why does the first $c evaluate to the incremented value in [$c, $c += $_] ?

1. Modifying a variable you use several times within an expression is begging for problems. Don't!

2. You can't use a state variable for something like this! As soon as that line gets evaluated twice, you end up in deep sh^B^Bproblems:

use feature qw(say state); my @widths = (2, 6, 5, 7); foreach (1 .. 2) { my @partitions = map { state $c = 0; [$c, $c += $_] } @widths; say '[', join(', ', @$_), ']' for @partitions; print "\n"; }

State variables are too global. The simplest solution I can think of is:

use feature qw(say); my @widths = (2, 6, 5, 7); foreach (1 .. 2) { my @partitions = do { my $c = 0; map { $c += $_; [$c - $_, $c] } @ +widths}; say '[', join(', ', @$_), ']' for @partitions; print "\n"; }
or
use feature qw(say); my @widths = (2, 6, 5, 7); foreach (1 .. 2) { my @partitions = do { my $c = 0; map { my $old = $c; [$old, $c+=$_ +] } @widths}; say '[', join(', ', @$_), ']' for @partitions; print "\n"; }

Jenda
Enoch was right!
Enjoy the last years of Rome.

Log In?
Username:
Password:

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

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

    No recent polls found