FFI::Platypus is interesting. It seems like real FFI module for Perl 5.

FFI is foreign function interface. This is a little slow than XS, but you can call C/C++ library without C code.

I saw some FFI module for perl 5, FFI, or FFI::Raw, but not enough to create C extension flexibly.

FFI::Platypus seems like excelent module because you can call any C/C++ library using its features.

I try some example. All work well.

use FFI::Platypus; my $ffi = FFI::Platypus->new; $ffi->lib(undef); # search libc # call dynamically

$ffi->function( puts => ['string'] => 'int' )->call("hello world"); # attach as a xsub and call (much faster)

$ffi->attach( puts => ['string'] => 'int' );

puts("hello world");



You can also create C structure in Perl code by using "record_layout" method.

package My::UnixTime; use FFI::Platypus::Record; record_layout(qw(

int tm_sec

int tm_min

int tm_hour

int tm_mday

int tm_mon

int tm_year

int tm_wday

int tm_yday

int tm_isdst

long tm_gmtoff

string tm_zone

)); my $ffi = FFI::Platypus->new;

$ffi->lib(undef);

# define a record class My::UnixTime and alias it to "tm"

$ffi->type("record(My::UnixTime)" => 'tm'); # attach the C localtime function as a constructor

$ffi->attach( localtime => ['time_t*'] => 'tm', sub {

my($inner, $class, $time) = @_;

$time = time unless defined $time;

$inner->(\$time);

}); package main; # now we can actually use our My::UnixTime class

my $time = My::UnixTime->localtime;

printf "time is %d:%d:%d %s

",

$time->tm_hour,

$time->tm_min,

$time->tm_sec,

$time->tm_zone;



If you use FFI::TinyCC module, you can write C code and execute it by jit.

use FFI::TinyCC; use FFI::Platypus::Declare qw( int ); my $tcc = FFI::TinyCC->new; $tcc->compile_string(q{

int

find_square(int value)

{

return value*value;

}

}); my $address = $tcc->get_symbol('find_square');

attach [$address => 'find_square'] => [int] => int; print find_square(4), "

"; # prints 16



If you don't know FFI module for perl5, it is worth using FFI::Platypus

.

FFI::Platypus is new project. Its development start from 2015-01-07.

I didn't know until a few weeks ago.

If you are interesting FFI::Platypus, let's share it on GitHub.

FFI::Platypus/Github

I think good project should get a lot of evaluation.

For example, ruby ffi is shared over than 1200.

ruby people share their projects positively.

The ruby people personality that "Let's share more projects! Open source programmer need more evaluation" is good.

FFI::Platypus is yet new, but good project.

If you plan to use FFI in the feature, let's try to use and share it!

FFI::Platypus/Github

