Hallo pl,
sprintf wird nur einmal aufgerufen…
Das würde eins von 2 Dingen voraussetzen:
Entweder wird Perl von einem gut optimierenden Compiler übersetzt, der dem Code ansieht, dass nur ein Wert des Array verwendet wird und den Code unter der Haube in ein switch umbaut.
Oder Perl speichert keine Werte im (assoziativen) Array, sondern Lambdas, so dass der eigentliche Wert eines Array-Elements erst beim Zugriff bestimmt wird. Dafür sieht die Syntax aber eigentlich zu konventionell aus.
Tatsächlich? Ist Perl so ein raffinierter Hund?
Nach meinem Verständnis einer altehrwürdigen, vom Optimierungen unverdorbenen Scriptsprache wie PHP oder Perl wird zunächst mal das Array aufgebaut und dafür sieben Mal sprintf aufgerufen. Es entsteht ein assoziatives Array mit sieben int => string Einträgen (wobei auch ein einfaches Array genügt hätte, aber das scheint ja bei vielen Perlians idiomatisch zu sein), und davon wird dann einer verwendet.
Rolf
sumpsi - posui - clusi