mapを使用するときに今何番目の要素を処理しているのか上手く知る方法はあるのでしょうか?

やりたいことは、@before = ('a', 'b', 'c')とう配列があったときに、
”この配列の要素”をkey、”その配列要素の場所”をvaluとしてハッシュを作ることです。

今はmapの外に$iを用意して下記の様にしています。

my @before = ('a', 'b', 'c');
my $i=-1;
my @after = map { ++$i => $_ } @before;

この$iを使わずに実現する方法があったら教えて欲しいです。
この$iがとれない様であれば、forでやった方がキレイかなと思ってしまいます。