seguridad respaldo qué que puede pasa momento imposible este elimino eliminar copias copia como borrar anterior perl reference stdin perl-module filehandle

perl - qué - que pasa si elimino el respaldo de mi iphone anterior



¿Cómo quitar una copia de un identificador de archivo STDIN? (2)

Si entiendo correctamente, quieres el equivalente de

open my $fh, ''<&STDIN''

Eso sería

open my $fh, ''<&'', $filehandle

Sin embargo, no sé por qué quieres eso.

Estoy tratando de encontrar la forma de obtener un módulo Perl de deferencia y abrir una referencia a un identificador de archivo. Comprenderá lo que quiero decir cuando vea el programa principal:

#!/usr/bin/perl use strict; use warnings; use lib ''/usr/local/share/custom_pm''; use Read_FQ; # open the STDIN filehandle and make a copy of it for (safe handling) open(FILECOPY, "<&STDIN") or die "Couldn''t duplicate STDIN: $!"; # filehandle ref my $FH_ref = /*FILECOPY; # pass a reference of the filehandle copy to the module''s subroutine # the value the perl module returns gets stored in $value my $value = {Read_FQ::read_fq($FH_ref)}; # do something with $value

Básicamente, quiero que el programa principal reciba entrada a través de STDIN, haga una copia del identificador de archivo STDIN (para un manejo seguro) y luego pase una referencia a esa copia a la subrutina read_fq () en el archivo Read_FQ.pm (el módulo perl). La subrutina leerá la entrada de ese identificador de archivo, lo procesará y devolverá un valor. Aquí el archivo Read_FQ.pm:

package Read_FQ; sub read_fq{ my ($filehandle) = @_; my contents = ''''; open my $fh, ''<'', $filehandle or die "Too bad! Couldn''t open $filehandle for read/n"; while (<$fh>) { # do something } close $fh; return $contents;

Aquí es donde me estoy metiendo en problemas. En la terminal, cuando paso un nombre de archivo al programa principal para abrir:

cat file.txt | ./script01.pl

da el siguiente mensaje de error: Too bad! Couldn''t open GLOB(0xfa97f0) for read Too bad! Couldn''t open GLOB(0xfa97f0) for read

Esto me dice que el problema es cómo estoy desreferenciando y abriendo la referencia al identificador de archivo en el módulo perl. El programa principal está bien. Leí ese $refGlob = /*FILE; es una referencia a un identificador de archivo y, en la mayoría de los casos, Perl debe desreferenciarlo automáticamente. Sin embargo, ese no es el caso aquí. ¿Alguien sabe cómo desreferenciar una referencia de manipulación de archivos para poder procesarla?

Gracias. Cualquier sugerencia es bienvenida.


Su $filehandle ya debería estar abierto: abrió FILECOPY , tomó una referencia y lo puso en $FH_ref , que es $filehandle . Si desea volver a abrirlo nuevamente, use el <& argumento en open o simplemente comience a leerlo de inmediato .