Ho programmato C per un po '. Ora ho bisogno di scrivere un programma C che Perl possa chiamare. Dovrebbe avere la stessa sintassi della seguente funzione dummy perl: prendere due input, entrambi sono stringhe (possono contenere caratteri binari, anche "\ x00"), generare una nuova stringa.come scrivere una funzione C ed essere in grado di chiamarlo da perl
Naturalmente, l'algoritmo della funzione sarà più complesso, è per questo che ho bisogno di farlo in C.
sub dummy {
my ($a, $b) = @_;
return $a . $b;
}
ho brevemente guardato SWIG per l'attuazione, ma tenendo input/ouput diverso un numero intero non è facile, spero che qualcuno possa dare un esempio concreto.
Grazie in anticipo.
UPDATE: ottenuto un ottimo esempio da Rob (autore del modulo Inline :: C in cpan), grazie!
##############################
use warnings;
use strict;
use Devel::Peek;
use Inline C => Config =>
BUILD_NOISY => 1,
;
use Inline C => <<'EOC';
SV * foo(SV * in) {
SV * ret;
STRLEN len;
char *tmp = SvPV(in, len);
ret = newSVpv(tmp, len);
sv_catpvn(ret, tmp, len);
return ret;
}
EOC
my $in = 'hello' . "\x00" . 'world';
my $ret = foo($in);
Dump($in);
print "\n";
Dump ($ret);
##############################
Grazie per la risposta rapida e il collegamento. Sembra che Inline :: C abbia ridotto il dolore dell'uso di perlx per qualcuno che non conosce il perl guts. C'è un libro di cucina con numerosi esempi sull'uso di Inline :: C: https://metacpan.org/pod/Inline::C-Cookbook. – packetie