El módulo P5NCI permite cargar la librería desde Perl y llamar a las funciones:
$ cat -n usehcf.pl 1 #!/usr/local/bin/perl -w 2 use strict; 3 use P5NCI::Library; 4 5 my $lib = P5NCI::Library->new( library => './libhcf.so' ); 6 $lib->install_function( 'hcf', 'iii' ); 7 8 print hcf( 20, 10 ), "\n"; 9 print hcf( 12, 9 ), "\n"; 10 print hcf( 18, 12 ), "\n";La llamada a
P5NCI::Library->new
carga la librería.
La subsiguiente llamada al método install
busca la función en la librería
y crea una interfaz Perl para la especificación dada por la firma 'iii'
.
Esta firma indica que la función recibe dos enteros y devuelve un entero.
Observe que mediante P5NCI
es posible usar funciones cuyo
fuente no esta disponible. Tampoco importa en que lenguaje esté escrito.
Importa que dispongamos de la librería y que conozcamos el nombre y la
interfaz de la función.
El constructor admite la opción path
que permite especificar el
path de búsqueda para la librería. En este caso
podemos usar el ''nombre'' oficial de la librería (hcf
) y no
la especifciación completa. También dispone de una opción package
que
permite especificar el paquete en el que se aloja la función.
$ cat -n usehcf2.pl 1 #!/usr/local/bin/perl -w 2 use strict; 3 use P5NCI::Library; 4 5 my $lib = P5NCI::Library->new( library => 'hcf', path => '.' ); 6 print "Path de búsqueda:\n@DynaLoader::dl_library_path\n"; 7 $lib->install_function( 'hcf', 'iii' ); 8 9 print "hcf( 20, 10 ) = ",hcf( 20, 10 ), "\n"; 10 print "hcf( 12, 9 ) = ",hcf( 12, 9 ), "\n"; 11 print "hcf( 18, 12 ) = ",hcf( 18, 12 ), "\n";
La variable DynaLoader::dl_library_path contiene el camino de búsqueda de las librerías dinámicas.
Casiano Rodríguez León