in reply to confused with Inline::C again
If you want to return a list of values (suffixes) that you can assign in a statement like
my @a = Suff(@string);
you'd need to return them on the stack (Perl's stack, not C's). For this, there are the Inline macros
Inline_Stack_Vars Inline_Stack_Reset Inline_Stack_Push(sv) Inline_Stack_Done
which should be used in that sequence (of course, push as many values as you need).
As an alternative, you could create (and fill) an array (AV) on the XS side, and return a reference to it. This means, you'd assign it like this
my $aref = Suff(@string); # print "@$aref"; # or whatever
Other than that, it's hard to help (well, for me at least), because from your sample code I can't really make any inferences as to what exactly you're trying to do.
Update: (in response to your update)
#!/usr/bin/perl -wl use strict; use Inline C => <<'END_C'; void test() { Inline_Stack_Vars; Inline_Stack_Reset; char *string = "lhfsadgfbfsdaubsdkj"; int i; STRLEN n = strlen(string); for(i=0; i<n; i++){ Inline_Stack_Push( sv_2mortal( newSVpv(string + i, 0) ) ); } Inline_Stack_Done; } END_C my @a = test(); print for @a;
Output:
lhfsadgfbfsdaubsdkj hfsadgfbfsdaubsdkj fsadgfbfsdaubsdkj sadgfbfsdaubsdkj adgfbfsdaubsdkj dgfbfsdaubsdkj gfbfsdaubsdkj fbfsdaubsdkj bfsdaubsdkj fsdaubsdkj sdaubsdkj daubsdkj aubsdkj ubsdkj bsdkj sdkj dkj kj j
|
|---|