Foros del Web » Programación para mayores de 30 ;) » Programación General »

FileHandle y expresion regular como argumentos

Estas en el tema de FileHandle y expresion regular como argumentos en el foro de Programación General en Foros del Web. Hola! Alguno tiene idea de cómo pasar un FileHandle o una expresión regular como argumento de una subrutina de usuario? Lo que tengo es una ...
  #1 (permalink)  
Antiguo 18/06/2006, 17:25
 
Fecha de Ingreso: enero-2006
Mensajes: 7
Antigüedad: 18 años, 10 meses
Puntos: 0
FileHandle y expresion regular como argumentos

Hola!
Alguno tiene idea de cómo pasar un FileHandle o una expresión regular como argumento de una subrutina de usuario?
Lo que tengo es una rutina que escribe en un archivo, y esta rutina llama a otras, las cuales también escriben sobre el archivo, por lo que necesito pasarle el handle como parámetro.
Ej:
sub prepara{
open(ARCHIVO, "f.txt");
print ARCHIVO "A";
procesa(ARCHIVO, /^C/, "A");
procesa(ARCHIVO, "B");
close(ARCHIVO);
}

sub procesa{
#@_[0] ni @_[1] funcionan para nuestros propósitos.
}
  #2 (permalink)  
Antiguo 18/06/2006, 21:54
 
Fecha de Ingreso: mayo-2003
Mensajes: 328
Antigüedad: 21 años, 6 meses
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:38.