Tu solución no funcionará porque le falta '$' delante de la 'i'.
Aparte de eso, el uso de las llaves en forma de '${i}' es porque lo que rodea a la variable $i puede afectar a su nombre con lo que Perl podría confundirse.
Un ejemplo más claro. Si pongo
Using perl Syntax Highlighting
my $precio = 15;
my $var = "Coste: $precio_euros";
say $var; # quiero que salga en pantalla "Coste 15_euros"
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si ejecuto estas líneas, sale
Using text Syntax Highlighting
Coste:
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
que no es lo que esperaba. Si le pongo "use strict;" al principio del programa, sale este error:
Global symbol "$precio_euros" requires explicit package name at ./kk.pl line 21.
Execution of ./kk.pl aborted due to compilation errors.y ya vemos lo que pasa: que Perl se ha creído que la variable que hemos escrito es '$precio_euros'. Y no es eso lo que queremos.
Es obvio que esto sí funcionará:
Using perl Syntax Highlighting
my $var = "Coste: $precio euros";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
porque '$precio' está separado de lo que le sigue por un espacio en blanco. Pero, ¿qué ocurre si lo que queremos es que nuestra variable salga como antes, unida a algo que le sigue?
La forma tradicional es la que has comentado antes:
Using perl Syntax Highlighting
my $var = "Coste: " . $precio . "_euros";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y funciona... pero... es largo, y son dos operaciones de concatenación, cuando solo queremos una simple interpolación de una variable.
También se podría hacer con sprintf, desde luego:
Using perl Syntax Highlighting
my $var = sprintf "Coste: %s_euros", $precio;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
pero... sigue quedando largo
Entonces, necesitamos separar la variable '$precio' de lo que le sigue. Y ahí es donde aparecen las llaves:
Using perl Syntax Highlighting
my $var = "Coste: ${precio}_euros";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Más información en tu propio ordenador en
perldoc perldata,
y en la Web (
traducido al español), en la sección
Constructores de valores escalares, al final.
P.D.: en el ejercicio, lo que sigue a '$i' es un punto, que no afectaría al nombre de la variable, así que, realmente, las llaves sobran. Pero decidí ponerlas porque así me aseguraba por si en el futuro las condiciones cambiaban. Ejemplo:
$archivo = "${dia}_${mes}_${year}_001.pdf";