perl如何调用其它编程语言(如C)

发布于 2022-10-01 05:47:52 字数 4585 浏览 10 评论 0

问题描述:
unix环境下,在perl中
1、如何调用一个标准C函数。
2、如何调用一个4gl编写的函数。
3、如何调用一个操作系统函数或系统调用。

操作系统环境:
linux

具体测试代码和例子:

Makefile.PL内容如下:
代码:

  1. use ExtUtils::MakeMaker;
  2. # See lib/ExtUtils/MakeMaker.pm for details of how to influence
  3. # the contents of the Makefile that is written.
  4. WriteMakefile(
  5.     'NAME'              =>; 'Mytest',
  6.     'VERSION_FROM'      =>; 'Mytest.pm', # finds $VERSION
  7.     'PREREQ_PM'         =>; {}, # e.g., Module::Name =>; 1.1
  8.     'LIBS'              =>; [''], # e.g., '-lm'
  9.     'DEFINE'            =>; '', # e.g., '-DHAVE_SOMETHING'
  10.     'INC'               =>; '', # e.g., '-I/usr/include/other'
  11. );

复制代码

Mytest.PM的内容如下:
代码:

  1. package Mytest;
  2. require 5.005_62;
  3. use strict;
  4. use warnings;
  5. require Exporter;
  6. require DynaLoader;
  7. our @ISA = qw(Exporter DynaLoader);
  8. # Items to export into callers namespace by default. Note: do not export
  9. # names by default without a very good reason. Use EXPORT_OK instead.
  10. # Do not simply export all your public functions/methods/constants.
  11. # This allows declaration       use Mytest ':all';
  12. # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
  13. # will save memory.
  14. our %EXPORT_TAGS = ( 'all' =>; [ qw(
  15. ) ] );
  16. our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
  17. our @EXPORT = qw(
  18. );
  19. our $VERSION = '0.01';
  20. bootstrap Mytest $VERSION;
  21. # Preloaded methods go here.
  22. 1;
  23. __END__
  24. # Below is stub documentation for your module. You better edit it!
  25. =head1 NAME
  26. Mytest - Perl extension for blah blah blah
  27. =head1 SYNOPSIS
  28.   use Mytest;
  29.   blah blah blah
  30. =head1 DESCRIPTION
  31. Stub documentation for Mytest, created by h2xs. It looks like the
  32. author of the extension was negligent enough to leave the stub
  33. unedited.
  34. Blah blah blah.
  35. =head2 EXPORT
  36. None by default.
  37. =head1 AUTHOR
  38. A. U. Thor, a.u.thor@a.galaxy.far.far.away
  39. =head1 SEE ALSO
  40. perl(1).
  41. =cut

复制代码

Mytest.xs内容如下:

代码:

  1. #include "EXTERN.h"
  2. #include "perl.h"
  3. #include "XSUB.h"
  4. MODULE = Mytest         PACKAGE = Mytest

复制代码

上面这个是大体的框架,我现在自己写了一个c函数,例如:
代码:

  1. #include <stdio.h>;
  2. static int testfun( int );
  3. int main( void )
  4. {
  5.     (void)fprintf(stderr,"Sample for test.\n");
  6.     if( testfun( 100 ) < 0 ) {
  7.         (void)fprintf(stderr,"testfun error!\n");
  8.         exit(-1);
  9.     }
  10.     exit(0);
  11. }
  12. int testfun(int num )
  13. {
  14.     if( num >; 0 )
  15.         printf("Int num = %d\n", num );
  16.     else
  17.         return -1;
  18.     return 0;
  19. }

复制代码

需求:
现在如何在上面那几个文件中添加,让perl可以执行c的函数。
如果使用其它的方式,怎么使用,具体的例子是什么

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文