* La variable @lineas es distinta de la variable $lineas, ya que una es un array y la otra un escalar.
* Una cosa es el número de elementos de un array o de una lista. Y otra cosa es cuál es el índice del último elemento del array. Generalmente el índice del último elemento será uno menos que el número de elementos, pero eso se puede cambiar (pero no aconsejable).
* Analizando la segunda solución:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
open (TEXTO,"test.txt");
my @texto=<TEXTO>; # @texto tiene todas las líneas de TEXTO, así que tiene 10 elementos
my @lineas = $#texto; # Se declara @lineas, y el primer elemento, $lineas[0] lo inicializamos a 9
# (porque $#texto es el índice del último elemento)
my $final = @lineas+9; # Se declara $final y se inicializa al valor de @lineas en escalar, que es
# igual al número de sus elementos, 1, y se le suma 9.
print "El numero de lineas es $final"; # $final vale 10
close (TEXTO);
use strict;
open (TEXTO,"test.txt");
my @texto=<TEXTO>; # @texto tiene todas las líneas de TEXTO, así que tiene 10 elementos
my @lineas = $#texto; # Se declara @lineas, y el primer elemento, $lineas[0] lo inicializamos a 9
# (porque $#texto es el índice del último elemento)
my $final = @lineas+9; # Se declara $final y se inicializa al valor de @lineas en escalar, que es
# igual al número de sus elementos, 1, y se le suma 9.
print "El numero de lineas es $final"; # $final vale 10
close (TEXTO);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
* Un array evaluado en contexto escalar devuelve el número de sus elementos (longitud del array).
* Otras posibilidades de solución son:
Using perl Syntax Highlighting
my $final = @texto;
print "El numero de lineas del archivo es ", $final;
print "El numero de lineas del archivo es ", $final;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Using perl Syntax Highlighting
print "El numero de lineas del archivo es ", scalar @texto;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* Cosas de Perl: lo dicho antes sobre que en las comillas dobles no se pueden interpolar expresiones no es del todo cierto. Lo normal es interpolar valores de variables. Si una de esas variables es un array, saldrán todos los elementos del array. Perl hace aquí una doble interpolación: convierte de variable array a sus elementos y luego los va colocando dentro del string, con un separador. Bueno, pues podemos hacer un truco: convertimos nuestra expresión en un array de un sólo elemento:
Using perl Syntax Highlighting
print "El numero de lineas del archivo es @{[ $#texto + 1 ]}";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4