FFI::Platypus::Closure - Platypus closure object
Contents
Constructor
new
my $closure = FFI::Platypus::Closure->new($coderef);
Create a new closure object; $coderef must be a subroutine code reference.
Copyright And License
This software is copyright (c) 2015-2022 by Graham Ollis.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5
programming language system itself.
perl v5.40.0 2025-01-11 FFI::Platypus::Closure(3pm)
Description
This class represents a Perl code reference that can be called from compiled code. When you create a
closure object, you can pass it into any function that expects a function pointer. Care needs to be
taken with closures because compiled languages typically have a different way of handling lifetimes of
objects. You have to make sure that if the compiled code is going to call a closure that the closure
object is still in scope somewhere, or has been made sticky, otherwise you may get a segment violation or
other mysterious crash.
Methods
call
$closure->call(@arguments);
$closure->(@arguments);
Call the closure from Perl space. May also be invoked by treating the closure object as a code
reference.
sticky
$closure->sticky;
Mark the closure sticky, meaning that it won't be free'd even if all the reference of the object fall out
of scope.
unstick
$closure->unstick;
Unmark the closure as sticky.
Name
FFI::Platypus::Closure - Platypus closure object
Synopsis
create closure with OO interface
use FFI::Platypus::Closure;
my $closure = FFI::Platypus::Closure->new(sub { print "hello world\n" });
create closure from Platypus object
use FFI::Platypus 2.00;
my $ffi = FFI::Platypus->new( api => 2 );
my $closure = $ffi->closure(sub { print "hello world\n" });
use closure
$ffi->function(foo => ['()->void'] => 'void')->call($closure);
Version
version 2.10
