.___. .__. .__ , | * _ * * [__]._.._. _. . * * [__) _ *._ -+- _ ._. | |(/, * * | |[ [ (_]\_| * * | (_)|[ ) | (/,[ ._| the xs-friendly way to tie perl arrays to c arrays # Perl tie my @palette, 'Tie::Array::Pointer', { length => 256 * 3, # 768 type => 'C', # unsigned chars (see perldoc -f pack) } do_something_with_palette(\@palette); # perl sub sub do_something_with_palette { my $array = shift; # .**** this is how we share *******. # * * my $address = tied(@$array)->address; # * * # `*********************************' xsub_manipulate_palette($address, scalar(@$array)); } # XSUB void xsub_manipulate_palette(addr, len) unsigned char *addr; int len; CODE: memfrob(addr, len); /* man 3 memfrob */ # Back in Perl Land foreach (@palette) { $_; # has been manipulated by funky gnu c code. } # # # # # # # # # # # # # # # # # # # # # # # ## yet another buppu creation ##