4

Perl API 中是否有用于获取 a 的实际整数字段的宏或函数IV*?我可以找到大量信息来获取几乎所有其他类型的价值,perlguts但这perlapi一点似乎让我难以理解。

4

2 回答 2

4

perlguts SvIV(SV*)应该可以解决问题。

#!/usr/bin/env perl

use strict;
use warnings;

use Inline C => <<'END';
void print_iv (SV* input) {
  if (! SvIOK(input))
    croak("Not an integer");
  printf("Printing integer %d\n", SvIV(input));
}
END

print_iv(3);
于 2013-05-30T03:34:08.417 回答
3
use Inline C => <<'__EOC__';

   void print_iv(SV* input) {
      SvGETMAGIC(input);
      printf("Printing integer %"IVdf"\n", SvIV(input));
   }

__EOC__

print_iv(3);

这修复了上一个答案中的三个错误:

  • 您需要SvGETMAGIC在访问标量之前调用它,以防它很神奇(一个特殊变量)。
  • SvIOK不应该检查。如何存储数字无关紧要。
  • %d并不总是适合IV. 不使用正确的模式会导致段错误。
于 2013-05-30T05:16:20.637 回答