for(@a1=`cat file`;$a[0]=shift @a1;@a1) { for(@a2=@b;$a[1]=shift @a2;@a2) # could be "for(;$a[1]=shift @b;@b)" if you don't care about emptying @b { for(@a3=grep /4/, @c;$a[2]=shift @a3;@a3) { ; } } }