#!/usr/bin/perl -w # El objetivo es hacer una subrutina que equivalga a un for(;;) # loop, devuelva una lista de las iteraciones, y llame a otro loop # sucesivamente hasta que se llegue a la dimensión de la primera # llamada y se pare. El fin último es poder hacer algo multidimensional, # como una cuadrícula, sin tener que escribir todos los for loops. use 5.030; # use Data::Printer; my $dimensions = 11_000; my @init = (0) x $dimensions; my @end = (1) x $dimensions; my @step = (0.1) x $dimensions; my $t = time(); my $results = loops(0); # begin in 0 for my $dim (@$results){ my %out; while (my ($k,$v) = each %$dim){ $out{$v}{$k} = $v; print "$out{$v}{$k} "; } say ""; # p %out; } say "Time elapsed ", time()-$t, " secs."; exit 1; sub loops { my ($d) = shift; state @r; for (my $i = $init[$d]; $i <= $end[$d]; $i += $step[$d]){ # if ($d-1 > 0){ # $r[$d]{$i} = ($r[$d-1]{$i}+$step[$d] <= $end[$d]) ? ($r[$d-1]{$i}+$step[$d]) : $end[$d]; # }else{ $r[$d]{$i} = $i; # } } if (++$d < $dimensions){ loops($d); } return \@r; }