The benefit to reverse traversal is that you don't interfere with the indices for future iterations by splicing this one out.use strict; use warnings; use File::Copy; my @files = glob("*.hml"); my @DIR = glob ("*/*.hml"); my @array = ('', grep -d, glob '*'); print "Here's DIR @DIR"; my $argsucess = 0; foreach my $el (@ARGV){ print "\n\n\nheres el $el"; foreach my $delele (reverse 0 .. $#DIR){ my $element = $DIR[$delele]; print "\n\n\nHERE'S ELE $element"; print "\n\n\n\n\n\n HERE'S DIR SO FAR @DIR\n\n\n"; my $re1='((?:[a-z][a-z]+))'; # Non-greedy match on filler my $re=$re1; my $path; if ($element =~m/$re/is){ $path = $1; } if ($el eq $path){ splice(@DIR, $delele, 1); $argsucess++; next; } } }
You might also consider using qr// for your regular expression (see Regexp Quote Like Operators). I'm a little unclear on why you aren't just using a fixed regular expression in if ($element =~m/$re/is){, nor why you are using the my $re=$re1; misdirection. Also, by initializing my $path; to undef instead of empty string (my $path = '';), you will likely get a number of unnecessary warnings from if ($el eq $path){.
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.
In reply to Re: Nested Foreach Loop skipping every other element??
by kennethk
in thread Nested Foreach Loop skipping every other element??
by ba1688
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |