LLamada desde Perl

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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
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=43.
2012-06-19