Tôi đã lập trình C trong một thời gian. Bây giờ tôi cần phải viết một chương trình C mà perl có thể gọi. Cần có cú pháp giống như hàm perl giả sau: Lấy hai đầu vào, cả hai đều là chuỗi (có thể chứa ký tự nhị phân, thậm chí là "\ x00"), xuất ra một chuỗi mới.cách viết hàm C và có thể gọi nó từ perl
Tất nhiên, thuật toán của hàm sẽ phức tạp hơn, đó là lý do tại sao tôi cần phải làm điều đó trong C.
sub dummy {
my ($a, $b) = @_;
return $a . $b;
}
Tôi có thời gian ngắn nhìn SWIG để thực hiện, nhưng lấy đầu vào/ouput khác hơn một số nguyên không phải là dễ dàng, hy vọng ai đó có thể đưa ra một ví dụ cụ thể.
Xin cảm ơn trước.
CẬP NHẬT: Có ví dụ tuyệt vời từ Rob (tác giả của mô-đun Inline :: C trong cpan), cảm ơn!
##############################
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);
##############################
Cảm ơn bạn đã trả lời và liên kết nhanh. Có vẻ như Inline :: C đã làm giảm sự đau đớn khi sử dụng perlxs cho một người không biết perl ruột. Có một cuốn sách dạy nấu ăn với nhiều ví dụ về cách sử dụng Inline :: C: https://metacpan.org/pod/Inline::C-Cookbook. – packetie