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 .