SEARCH
NEW RPMS
DIRECTORIES
ABOUT
FAQ
VARIOUS
BLOG

BotDetect - Real-Time Bot Detection API
 
 

MAN page from Mandrake Other perl-C-DynaLib-0.54-1.i386.rpm

Struct

Section: User Contributed Perl Documentation (3)
Updated: perl 5.004, patch 04
Index 

NAME

C::DynaLib::Struct - Tool for handling the C `struct' data type 

SYNOPSIS

  use C::DynaLib::Struct;
  Define C::DynaLib::Struct(        $struct_tag,        $template0, \@field_names0,        [$template1, \@field_names1,]        ... );
  $rstruct = tie( $struct, $struct_tag [, @initializer_list] );  $value = $rstruct->my_field();  $rstruct->my_field( $new_value );
  $pointer_to_struct = pack( 'p', $struct );  $struct = $new_struct;  # assigns all fields at once
  # after passing pointer-to-struct to a C function:  $rstruct->Unpack();  $returned_value = $rstruct->my_field();
 

DESCRIPTION

When mixing Perl and C, the conversion of data types can be rathertedious and error-prone. This module provides an abstraction fromPerl's pack and unpack operators for using structures whosemember data types and positions do not change.

Here are some examples of C code that deals with a struct. On theright are some possible Perl equivalents.

    C                           Perl    -                           ----    typedef struct {            use C::DynaLib::Struct;        int     m_int;          Define C::DynaLib::Struct(        double  m_double;           'Foo',        char *  m_string;           'i' => ['m_int'],    } Foo;                          'd' => ['m_double'],                                    'p' => ['m_string'] );                                # or, equivalently,                                Define C::DynaLib::Struct('Foo',                                    'idp', [qw(m_int m_double m_string)]);
    Foo foo;    Foo *pfoo = &foo;           $rfoo = tie ($foo, 'Foo');
    i = pfoo->m_int;            $i = $rfoo->m_int;
    d = foo.m_double;           $d = (tied $foo)->m_double;
    pfoo->m_string = "hi";      $rfoo->m_string("hi");
    Foo bar;                    tie ($bar, 'Foo');    bar = foo;                  $bar = $foo;
    void do_foo(Foo *arg);      use C::DynaLib;                                $lib = new C::DynaLib("-lfoo");                                $do_foo = $lib->DeclareSub("do_foo","","P");                                # or you could write an XSUB.
    do_foo(&foo);               &$do_foo($foo);
    returned_i = foo.m_int;     $rfoo->Unpack();                                $returned_i = $rfoo->m_int;
 

BUGS

Data member access is through autoloaded methods, so actual existingmethods are not allowed as structure member names. Currently, theillegal names are AUTOLOAD, TIESCALAR, FETCH, STORE, and Unpack.

The names of Structs themselves must be allowable package names.Using an existing package name will cause problems.

structs mean different things to different C compilers on differentmachines. Use caution when assigning pack codes to C data types. 

SEE ALSO

perlfunc(1) (for pack), perlref(1), perltie(1).


 

Index

NAME
SYNOPSIS
DESCRIPTION
BUGS
SEE ALSO

This document was created byman2html,using the manual pages.
 
ICM Bot detect detector