Skip to content

Instantly share code, notes, and snippets.

@knok
Created September 10, 2014 08:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save knok/12788bd70a6721e7da4e to your computer and use it in GitHub Desktop.
Save knok/12788bd70a6721e7da4e to your computer and use it in GitHub Desktop.
An example code to call libperl from ruby using DL::Import
# call libperl from ruby 1.9.x
require 'dl'
require 'dl/import'
require 'dl/struct'
require 'pp'
module Perl
extend DL::Importer
dlload "libperl.so"
extern "struct interpreter * perl_alloc(void)"
extern "void perl_construct(struct interpreter *)"
extern "int perl_parse(struct interpreter *, void *, int, char**, char**)"
extern "int perl_run(struct interpreter *)"
extern "int perl_destruct(struct interpreter *)"
extern "void perl_free(struct interpreter *)"
end
null = DL::CPtr.new(0);
perl = Perl.perl_alloc()
Perl.perl_construct(perl)
Perl.perl_parse(perl, null, 1, ["perl"].pack('p*'), null)
Perl.perl_run(perl)
Perl.perl_destruct(perl)
Perl.perl_free(perl)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment