Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: @array elements multiplication with another array elements.

by tobyink (Abbot)
on Oct 30, 2012 at 20:27 UTC ( #1001547=note: print w/ replies, xml ) Need Help??


in reply to @array elements multiplication with another array elements.

Here's another example using pairwise from the lovely List::MoreUtils package...

use List::MoreUtils qw( pairwise ); my @array1 = (3,4,6,5,8); my @array2 = (2,2,4,5,1); my @mults = pairwise { $a * $b } @array1, @array2; print "@mults\n";
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'


Comment on Re: @array elements multiplication with another array elements.
Select or Download Code
Re^2: @array elements multiplication with another array elements.
by grizzley (Chaplain) on Oct 31, 2012 at 07:39 UTC
    Wow, how can pairwise tell where the end of 1st array is? There was always the problem feature that regardless whether you write
    my @array1 = (3,4,6,5,8); my @array2 = (2,2,4,5,1);
    or
    my @array1 = (3,4,6,5,8,2,2,4); my @array2 = (5,1);
    using it with coma always results in flattened list:
    @array1,@array2
    is equivalent to
    (3,4,6,5,8,2,2,4,5,1)
    and yet pairwise deals with it:
    c:\>perl -le "use List::MoreUtils qw/pairwise/; @a=(1..5);@b=(11..15); + print for pairwise {$a+$b} @a, @b" 12 14 16 18 20 c:\>perl -le "use List::MoreUtils qw/pairwise/; @a=(1..5, 11,12);@b=(1 +3..15); print for pairwise {$a+$b} @a, @b" 14 16 18 4 5 11 12

      It uses a prototype of &\@\@. That means the two arrays get implicitly turned into arrayrefs by the Perl parser. The body of the sub just sees a coderef and two arrayrefs - not a flattened list. See perlsub.

      perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
        That's true! Wow, thanks, first example of prototypes being useful
        c:\>perl -le "sub f(\@\@) { print 'array ', ++$cnt ,': ', join ' ', @$ +_ for @_ } @a=(1..5, 11,12);@b=(13..15); f @a, @b" array 1: 1 2 3 4 5 11 12 array 2: 13 14 15

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (12)
As of 2014-09-22 15:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (198 votes), past polls