Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/06/2006, 21:54
kidd
 
Fecha de Ingreso: mayo-2003
Mensajes: 328
Antigüedad: 21 años
Puntos: 0
Hola:

No es necesario que hagas eso, lo que puedes hacer es imprimir en el archivo el retorno de la función, por ejemplo:

Código:
open my $FILE, '>', 'miarchivo.txt' or die("Unable to open file: $!");

    print {$FILE} "Línea 1 en el archivo";
    print {$FILE} procesa("B"); #va a imprimir en el archivo "Línea B"

close $FILE;


sub procesa{
    my $arg = shift;

    return("Línea $arg");
}

Como ves, la sintáxis que uso para abrir el archivo e imprimir en él es muy distinta a la que usas, te conviene usarlo como te lo pongo, es más "correcto" y más fácil de comprender.

Lo segundo es que en la línea:

Código:
print {$FILE} procesa("B");
Le estamos diciendo a Perl que imprima dentro del archivo el resultado que venga de la llamada de la función procesa(), la cual regresa el resultado por medio de return().

Ahora, también hubieramos podido hacer lo siguiente:

Código:
open my $FILE, '>', 'miarchivo.txt' or die("Unable to open file: $!");

    print {$FILE} "Línea 1 en el archivo";
    procesa($FILE,"B"); #va a imprimir en el archivo "Línea B"

close $FILE;


sub procesa{

    my ($FILE,$arg) = @_;

    print {$FILE} "Línea $arg";
}
Como ves, todo lo que tenemos que hacer es mandar la variable en la que tenemos el FILEHANDLE, en este caso es $FILE, ésta opción es similar a la que tu estás buscando y también es correcta, aunque en mi opinión la primera es la mejor por ser más portable, pues más adelante podrás cambiar una u otra parte del código sin afectar.

Saludos
__________________
Uriel Lizama, Perl Developer

Aprende Perl en Perl en Español.