El Sistema de FLAGS de Perl

En Perl el sistema de banderas utiliza los primeros 24 bits de un entero de 32 bits. Los restantes 8 bits se utilizan para almacenar información sobre el tipo. Las banderas nunca se acceden directamente: La API de Perl provee un conjunto de macros para su lectura y modificación (Véase la sección SV Flags de la documentación en perlapi).

Por ejemplo, el módulo Readonly provee una forma alternativa de tener constantes en Perl 5. En el caso de los escalares lo hace manipulando la bandera READONLY :

lhp@nereida:~/Lperl/src/XSUB/Example$ perl -MDevel::Peek -MReadonly -de 0
main::(-e:1):   0
  DB<1> Readonly::Scalar $sca => 4
  DB<2> Dump $sca
SV = IV(0x838349c) at 0x8462efc
  REFCNT = 1
  FLAGS = (IOK,READONLY,pIOK)
  IV = 4

El código del submódulo Readonly::XS que se encarga de las constantes escalares es extraordinariamente compacto:

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"

MODULE = Readonly::XS   PACKAGE = Readonly::XS    

int
is_sv_readonly(sv)
    SV *sv
PROTOTYPE: $
CODE:
    RETVAL = SvREADONLY(sv);
OUTPUT:
    RETVAL

void
make_sv_readonly(sv)
    SV *sv
PROTOTYPE: $
CODE:
    SvREADONLY_on(sv);

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19