perl - 如何在 Perl 哈希中存储 null

标签 perl xs

我想在我的 C 代码 (XS) 中使用 Perl 哈希作为一个集合,所以我只需要将 key 保留在哈希中。是否可以存储诸如 null 或其他常量值之类的内容以避免创建不必要的值?

像这样的东西:

int add_value(HV *hash, SV *value)
{
    // just an example of key
    char key[64];
    sprintf(key, "%p", value);
    if (hv_exists(hash, key, strlen(key)) return 0;

    // here I need something instead of ?
    return hv_stores(hash, key, ?) != NULL;
}

一种可能的解决方案可能是存储值(value)本身,但也许 undef 有特殊的常量。或空。

最佳答案

&PL_sv_undef是未定义的值,但不幸的是,您不能在散列和数组中天真地使用它。报价perlguts :

通常,如果要在 AV 或 HV 中存储未定义值,则不应使用 &PL_sv_undef ,而应使用 newSV 函数创建新的未定义值,例如:

av_store( av, 42, newSV(0) );
hv_store( hv, "foo", 3, newSV(0), 0 );

关于perl - 如何在 Perl 哈希中存储 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836990/

相关文章:

linux - 列与制表符而不是空格对齐

perl - 在一段时间内有条件地测试文件存在是否存在任何陷阱?

linux - 如何重定向 apt 文件更新输出

perl - 如何在不安装的情况下使用本地库中的模块?

perl - 如何使用 B::Hooks 来操作 perl 解析器

perl - 如何手动安装 XS 模块?

Perl CGI::Fast 关闭连接而不发送数据

perl - 在 C++ (Win32) 中嵌入 Perl 时检查 ERRSV 时崩溃

perl - 如何从 CPAN 手动编译 XS 模块?