• Publicidad

Uso del & y >>

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Uso del & y >>

Notapor jrincon3 » 2009-01-29 04:25 @226

Hola, soy nuevo es este mundo del Perl y por tanto de este foro. Para alguien que desconocía este lenguaje echando un vistazo hay cosas que son más que entendibles.

Pero el motivo que me hace escribir este post es una duda, me he encontrado con unas líneas de código que no termino de comprender y busco que alguien me pudiera orientar sobre este tema.

Este es el código y la parte que no entiendo son el uso del "&" y de ">>" para este caso:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$exit_code = system( "aqui va una ejecución" );
$return_basic = ( $exit_code & 255 );
$return_app = ( $exit_code >> 8 );
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Saludos y gracias.
jrincon3
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-01-29 04:11 @216

Publicidad

Notapor explorer » 2009-01-29 05:24 @267

Bienvenido a los foros de Perl en Español, jrincon3.

Los operadores binarios "&" y ">>" funcionan exactamente igual que en lenguaje C (y, por lo tanto, en muchos otros).

El operador "&" hace la operación 'AND' lógica a nivel de bits, mientras que el operador ">>" hace el desplazamiento de bits hacia la derecha.

Lo que hace el código es lo siguiente: system() devuelve el valor de la ejecución de sus argumentos como si fueran ejecutables en el sistema.

Ese valor que retorna lo guarda en la variable $exit_code y es un valor numérico de 2 bytes. El primer byte, el de mayor peso, almacena el 'resultado' de la ejecución (no confundir con la 'salida' de la ejecución). Y en el segundo byte, el de menor peso, almacena el número de la señal del sistema que provocó la muerte prematura del proceso (en caso de muerte prematura, claro).

Para obtener estos dos valores, tenemos que extraer los dos bytes por separado. En el caso del byte de menor peso, nos vale con hacer la operación lógica 'AND' con los 8 bits más bajos puestos. De ahí que hagamos $exit_code & 255. 255 equivale a un byte con sus 8 bits puestos a 1. El resultado es que en la variable $return_basic nos quedamos con una copia del byte de menor peso de $exit_code.

Para obtener el byte de mayor peso, hacemos otra operación: cogemos el valor de $exit_code y lo desplazamos hacia la derecha 8 veces: $exit_code >> 8. Y ese valor lo guardamos en $return_app.

Más información sobre los operadores en perlop. Más información sobre operaciones binarias en Wikipedia.
Última edición por explorer el 2009-01-29 07:27 @352, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor jrincon3 » 2009-01-29 07:16 @344

OK, muchas gracias, me es de gran ayuda.

PD.- ¡Así da gusto!
jrincon3
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-01-29 04:11 @216


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados

cron