Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
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
Replies are listed 'Best First'.
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 scrutinizing the Monastery: (22)
As of 2015-07-30 20:31 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 (273 votes), past polls