[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Una dudilla de perl



En sáb, 2002-01-19 a 22:01, Hue-Bond escribió:
> $ cat test.pl 
> #!/usr/bin/perl
> sleep (4);
> $a=<STDIN>;
> 
> $ ./test.pl &
> [16] 8500
> $               # pulso enter
> $ 
> $ 
> $ 
> $ 
> $ 
> 
> [16]+  Stopped                 ./test.pl
> $ _
> 
>          El shell detiene al script perl porque el uso de <> necesita un
>      "algo" que no sé bien lo que  es. Lo que quiero es saber cómo puedo
>      leer una  línea de  un descriptor  de archivo sin  que el  shell me
>      suspenda mi script. Adicionalmente me gustaría que la función fuera
>      bloqueante, o  sea que la  ejecución del  programa al llegar  a ese
>      punto se detuviera  esperando al usuario. read() y  sysread() no me
>      valen porque no leen  una línea y además si no  hay datos que leer,
>      la ejecución del script continúa como si nada. ¿Cómo hago?

La verdad es que el programa funciona correctamente, pero no hace los
que tú quieres: pruebalo sín poner & al invocar el programa y verás que
no existe ningún problema.

	Yo diría (no soy un experto en shell) que cuando tu programa que está
en background y quiere realizar una operación de interactividad con el
shell (leer de la consola) la shell lo detecta y lo pone en modo pausa.
Y te lo avísa para que tú actúes en consecuencia. (pasandolo a
foreground). Si en vez de STDIN usas otro descriptor de fichero, como un
archivo de un directorio, el programa no debe detenerse:

Algo asi:

#!/usr/bin/perl

open FICHERO, "<nombre.fich" or die "no puedo abrir";
sleep(4);
$a=<FICHERO>;


Eso lee el primer caracter. Si quieres más.........



Reply to: