Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^3: Variable number of foreach loops

by BrowserUk (Patriarch)
on Nov 27, 2013 at 18:04 UTC ( [id://1064678]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Variable number of foreach loops
in thread Variable number of foreach loops

BTW what is the third argument($i) nFor( $n-1, @_, $i ) doing here?

As the sub recurses, one of the array references is remove from the front of @_ at each level, and the current value being iterated by the for loop at that level is added to the end.

Once $n == 0, all the array references have been removed and $n has been shifted off, all that is left in @_, is the set of elements to be printed.

BTW. Here is a cleaner implementation that takes a callback to which the results sets are passed:

#! perl -slw use strict; sub nForX(&@) { my $code = shift; my $n = shift; return $code->( @_ ) unless $n; for my $i ( @{ shift() } ) { &nForX( $code, $n-1, @_, $i ); } } my @a = 1..10; my @b = 'a'..'z'; my @c = map chr, 33 .. 47; nForX { print join ' ', @_; } 3, \( @a, @b, @c );

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.

Replies are listed 'Best First'.
Re^4: Variable number of foreach loops
by abhay180 (Sexton) on Nov 28, 2013 at 05:09 UTC
    thanks a lot. yes i get it now. In the same light.....i want to call nfor() with different number of arguments...
    nfor(1,\@a_1); nfor(2,\@a_1,\@a_2); nfor(3,\@a_1,\@a_2,\@a_3);...so on nfor(N,\@a_1,\@a_2,...\@a_N).
    I have a way...but what to check if there is a much crispier way to do it.

      If you store your arrays (more specifically references to your arrays) in an array, you can say

      my @arrayOfArrays = ( \@a_1,\@a_2,...,\@a_20 ); my $n = 10; nfor( $n, @arrayOfArrays[ 0..$n-1 ] );

      Where will you get the variable number of arrays from? And how will you be storing them?


      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.
        I have stored my data in N arrays. N varies from 1..20 I have a random string, that i breakdown into some N-segments. Each Segment is then a array. Now i want to run nfor() on these. So as you can see segment size is random. Hence variable number of arrays.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2024-03-19 08:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found