Normalmente vas a utilizar algún signo/símbolo para evaluar "algo" en forma de expresión. En este caso, si no pones el
+, la palabra "shift" te la tomará como
bareword... y obviamente te provocará errores. Simplemente pude haber puesto shift() y punto, pero +shift también es válido.
Este tipo de nomenclatura es generalmente usada donde definitivamente el uso de {} puede ser muy ambiguo para construir una expresión, por ejemplo en el caso de
map. map tiene 2 modos, modo bloque y modo expresión. Imagina este caso:
Using perl Syntax Highlighting
@ret = map { $_ => 1 } @arr;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Aquí map es evaluado en modo BLOCK, ya que { } eso significa, pero también sabemos que {} son constructores de
hashes anónimos, cuyo caso de este ejemplo es lo que queremos construir, un
hashref. Por lo tanto, es necesario eliminar esa ambigüedad indicándole al compilador/interprete que evalúe eso como una expresión de la siguiente manera:
Using perl Syntax Highlighting
@ret = map +{ $_ => 1 }, @arr;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Ahora sí... map nos regresará un
array de
hashrefs.
Pruébalo tú mismo:
Using perl Syntax Highlighting
require Data::Dumper;
print Data::Dumper::Dumper( map { $_ => 1 } ( 1, 2, 3, 5, 6 ) );
print Data::Dumper::Dumper( map +{ $_ => 1 }, ( 1, 2, 3, 4, 5, 6) );
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Saludos,
Mas referencias en:
Effective Perl Programming, editorial Addison Wesley, Autores Joseph N. Hall y Randal L Schwartz.