間違ってて呆れられないか心配ですが。
&lって変数なんですか?
本当は
a.sort_by (&l=->(i){[i[1],n+=1]})
sort_byには&l変数に代入されたブロックが入る?
バッドノウハウの塊だとすると普通の書き方はどうなるでしょうか?

aから探索するときも&lの比較関数を基準に探す。
何度も再質問してますがよろしくお願いします。