Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: A better (ie.more concise) way to write this?

by roboticus (Chancellor)
on Dec 13, 2013 at 17:13 UTC ( #1067049=note: print w/ replies, xml ) Need Help??


in reply to A better (ie.more concise) way to write this?

BrowserUk:

I'd do it like this:

@a = map { ++$_ % 10 } @a;

If I'm missing the point and you're explicitly wanting to only alter a subset of the items, a slice'll adapt it:

@a = map {++$_ % 10 } @a[0-5,7];

Update: If the point is to modify it in place, I like the AM post above...

...roboticus

When your only tool is a hammer, all problems look like your thumb.


Comment on Re: A better (ie.more concise) way to write this?
Select or Download Code
Re^2: A better (ie.more concise) way to write this?
by Anonymous Monk on Dec 13, 2013 at 17:35 UTC

    Watch out, because

    @b = map { ++$_ % 10 } @a;

    modifies both @a and @b.

    You can also do something like this:

    $_ = ($_+1) % 10 for @a[3..7];
Re^2: A better (ie.more concise) way to write this?
by BrowserUk (Pope) on Dec 13, 2013 at 18:23 UTC
    I'd do it like this:@a = map { ++$_ % 10 } @a;

    That pretty much defeats the purpose. Instead of:

    $things{ $thing }{$someotherkey}[$someindex]{$somekey}[ $_ ] = $things +{ $thing }{$someotherkey}[$someindex]{$somekey}[ $_ ] + 1 % 10 for 1 +.. 10;

    You get:

    @{ $things{ $thing }{$someotherkey}[$someindex]{$somekey} }[ 1 .. 10 ] + = map{ ++$_ % 10 } @{ $things{ $thing }{$someotherkey}[$someindex]{$ +somekey} }[ 1 .. 10 ];

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Then , if you want to modify an existing data structure, what about using the fact that modifying $_ will modify the original array? Something like this, shown under the debugger:
      DB<1> @a = 1..9; DB<2> map{ $_ = ++$_% 10 } @a; DB<3> x @a 0 2 1 3 2 4 3 5 4 6 5 7 6 8 7 9 8 0 DB<4>
      Well, this obviously works, but something like $c = ++$c is, I believe, not defined in C and probably also not in Perl (i.e. the implementor if free to do whatever). It could be changed to:
      map { $_ ++; $_ = $_ % 10} @a;
      This would probably be more secure against any change of implementation.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2015-07-04 02:04 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 (57 votes), past polls