Estoy tratando de trabajar en un pequeño proyecto de aprendizaje de Perl que requiere leer 4 enteros sin signo de un socket. No pude leer más de 1 entero, y después de buscar descubrí una solución. Pero tengo que entender lo que no hice derechasocket-> recv() vs. <>?
Ejemplo 1 (y han pasado por un par de libros de Perl, perldocs, etc en vano.): Aquí está el código de la solución exitosa (original), asumir la socket connect es exitoso para ambos a continuación:
{
local $/ = \16; # make <> read in 16 bytes with one swoop.
my @integers = unpack "IIII", <$sock>;
print "numbers: @val\n";
}
Ejemplo 2: Intenté esto a continuación. Si puedo imprimir la entrada antes de desembalar, solo me dan un entero:
my $input;
$sock->recv($input,16,0);
my @integers = unpack("IIII", $input);
preguntas específicas:
- En el ejemplo 1, ¿qué diablos es "$ /"? ¿Y cómo "cambia" <>, lo que pensé, leí STDIN?
- En el ejemplo 2, ¿hay alguna razón por la cual mi recv() no extraiga más de un entero del socket? Mi comprensión (por perldoc) es que el parámetro "SIZE" se predetermina a "bytes", y los enteros son 4 bytes?
Se agradece cualquier ayuda, sugerencias, etc. Por cierto, el "proyecto de aprendizaje" es overthewire.org - cosas geniales.
Para que la documentación simple salga del camino: [perlvar $ /] (http://p3rl.org/var#%24INPUT_RECORD_SEPARATOR); '<>' es solo un nombre diferente para [readline] (http://p3rl.org/readline) – daxim