Bueno, este ejercicio está interesante... traigo dos soluciones: una la entiendo y la segunda la entiendo a medias, porque la hice por tanteo. Además me surgieron nuevas dudas.
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict
;
open (TEXTO
,"test.txt");
my @texto=<TEXTO>;
print "El numero de lineas del archivo es ";
print $#texto + 1;
close (TEXTO
);Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Este código lo entiendo, lo que se me escapa es que puedo meter entre las comillas
$#texto y me lo imprime, pero si pongo
$#texto + 1, no realiza la operación suma, deduzco porque esas comillas se introducen para que imprima literalmente, sin realizar operaciones con variables, arrays, etc... Además esta algo a tener en cuenta y es que Perl empieza contar desde 0 y no desde uno.... por eso hay que sumar uno al número de elementos del array.
Este otro código, funciona pero.... vamos a verlo:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict
;
open (TEXTO
,"test.txt");
my @texto=<TEXTO>;
my @lineas = $#texto;
my $final = @lineas+9;
print "El numero de lineas es $final";
close (TEXTO
);Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Se ve que uso un array nuevo "@lineas" y lo igualo con "$#texto" que me dice el número de elementos del array.
¡Anda!, ahora que lo escribo, veo que para este código he hecho trampa ya que partí de que sabia el número final de líneas (en este caso al tratarse de un txt pequeño lo sé.... pero el objetivo sería partir de que el archivo tiene muchas líneas y que no cuantas tiene a simple vista).
Lo que no pude hacer fue usar un variable escalar, es decir
$lineas en lugar de
@lineas, eso me daba error, pero no entiendo porque no me deja almacenar en el escalar.... ¿ alguna idea ?
Otra cosa, como sería lógico (para mi)... en la línea "
my $final = @lineas+9;" pondría la operación "
my $final = @lineas+1;" ya que sumaría los elementos del array que son 9 (empezando a contar desde 0) y le sumo uno, lo que daría 10.... pero no.... para que dé 10 fui tanteando y hay que sumarle 9 ...jeje... ¿por qué?
Vaya, vaya, vaya..... mientras escribía la pregunta se me ocurrió una posible razón de porque hace eso... es simplemente porque digamos que el
@lineas es una matriz con 9 elementos y cuando igualo esa matriz a un escalar pasa de tener 9 elementos a tener 1 porque es un escalar.
Pero aun así ¿por qué me muestra en pantalla el siguiente código que el número de líneas es 1 si Perl empieza a contar desde cero y un escalar tiene un elemento lo que para Perl sería un número de elementos igual a 0?
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict
;
open (TEXTO
,"test.txt");
my @texto=<TEXTO>;
my @lineas = $#texto;
my $final= @lineas;
print "El numero de lineas es $final";
close (TEXTO
);Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Buffff..... no se si me habré explicado bien, sera difícil entenderme.... perdón
P.D: cada vez me gusta más esto de aprender Perl, Gracias explorer y creating por ir respondiendo a mis dudas.