Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^2: Variable number of foreach loops

by abhay180 (Acolyte)
on Nov 27, 2013 at 17:56 UTC ( #1064672=note: print w/ replies, xml ) Need Help??


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

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


Comment on Re^2: Variable number of foreach loops
Replies are listed 'Best First'.
Re^3: Variable number of foreach loops
by BrowserUk (Pope) on Nov 27, 2013 at 18:04 UTC
    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.
      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.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (14)
As of 2015-08-04 20:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The oldest computer book still on my shelves (or on my digital media) is ...













    Results (74 votes), past polls