Hier ist eine weitere Möglichkeit, ich dies zu tun denken kann:
sub get_bumper {
my $i = 0;
sub { $i++ };
}
my $bump = get_bumper; # $bump is a closure with its very own counter
map { $_ => $bump->(); } @arr;
Wie bei vielen Dingen, die Sie in Perl tun können: Seien Sie nicht tun Dies. :) Wenn die Reihenfolge der Werte, die Sie zuweisen müssen, komplexer ist (z. B. 0, 1, 4, 9, 16 ... oder eine Folge von Zufallszahlen oder von einer Pipe gelesenen Zahlen), ist es einfach, diesen Ansatz anzupassen es, aber es ist in der Regel noch einfacher, nur unbeli's approach zu verwenden. Der einzige Vorteil dieser Methode besteht darin, dass sie eine saubere Möglichkeit bietet, willkürliche Lazy-Folgen von Zahlen bereitzustellen und zu konsumieren: Eine Funktion, die eine vom Aufrufer angegebene Sequenz von Zahlen benötigt, kann eine Coderef als Parameter nehmen und sie wiederholt aufrufen Nimm die Zahlen.
nette eins. Perl überrascht mich nach so vielen Jahren immer wieder :) – unbeli
Es ist schade, dass '% hash' vorher deklariert werden muss, also können wir nicht schreiben wie' my @hash {@arr} = 0 .. $ # arr; '... – Zaid
@Zaid Es gibt immer nette Tricks wie' @ $ _ {@ arr} = 0 .. $ # arr für \ my% hash; ', aber Eugens Code hat weniger Schockwert. –