What do you think of the following?
It needs a package variable of $main::doforeach_index, but providing you don't override this value you can do nested loops galore with an automagic index. Shame it's the wrong way around. I couldn't swap it round, can anyone else?
use strict;
sub doforeach (&@) {
my $coderef = shift;
my $index=0;
for (@_) {
no strict "vars";
$doforeach_index = $index;
&$coderef;
$index++;
}
}
sub doforeach_index () {
return our $doforeach_index;
}
doforeach { print doforeach_index . "=$_\n" } ('one','two','three');
#prints...
#0=one
#1=two
#2=three