首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何确定Perl函数在运行时是否存在?

如何确定Perl函数在运行时是否存在?
EN

Stack Overflow用户
提问于 2009-01-11 13:28:43
回答 4查看 20K关注 0票数 25

我正在用Perl开发一个测试框架。作为测试的一部分,我可能需要为任何给定的测试添加前置条件或后置条件检查,但不一定为所有测试添加前置条件或后置条件检查。到目前为止,我得到的结果是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eval "&verify_precondition_TEST$n";
print $@ if $@;

不幸的是,这将输出“未定义的子例程&verify_precondition_TEST1调用于...”如果函数不存在。

在尝试调用函数之前,如何提前确定该函数是否存在?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-11 13:49:10

使用已定义的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (eval "defined(&verify_precondition_TEST$n)") {
    eval "&verify_precondition_TEST$n";
    print $@ if $@;
}
else {
    print "verify_precondition_TEST$n does not exist\n";
}

编辑:嗯,我只想到了这个问题中的eval,但是关于Leon Timmerman提到的符号引用,你不能这样做吗

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (defined(&{"verify_precondition_TEST$n"}) {
    &{"verify_precondition_TEST$n"};
    print $@ if $@;
}
else {
    print "verify_precondition_TEST$n does not exist\n";
}

即使是严格的?

票数 10
EN

Stack Overflow用户

发布于 2009-01-11 13:43:14

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Package::Name->can('function')

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*Package::Name::function{CODE}

# or no strict; *{ "Package::Name::$function" }{CODE}

或者只是生活在异常中。如果在eval中调用该函数并且设置了$@,则不能调用该函数。

最后,听起来您可能希望使用Test::Class,而不是自己编写。

编辑:在其他答案中提到的defined &function_name (或no strict; defined &{ $function_name }变体)看起来是最好的方法。对于要作为方法调用的东西,UNIVERSAL::can是最好的(从风格上讲),既然Perl提供了执行所需的语法,为什么还要费心修改符号表呢?

Learning++ :)

票数 42
EN

Stack Overflow用户

发布于 2009-01-11 17:21:49

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sub function_exists {    
    no strict 'refs';
    my $funcname = shift;
    return \&{$funcname} if defined &{$funcname};
    return;
}

if (my $subref = function_exists("verify_precondition_TEST$n") {
    ...
}
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/433752

复制
相关文章
Java如何在运行时识别类型信息?
在日常的学习工作当中,有一些知识是我们在读书的时候就能够习得;但有一些知识不是的,需要在实践的时候才能得到真知——这或许就是王阳明提倡的“知行合一”。
沉默王二
2019/09/17
1.1K0
翻译:Perl代码审计:Perl脚本中存在的问题与存在的安全风险
程序设计语言通常不构成安全风险,风险是由程序员带来的。几乎每种语言都有某些缺陷,这些缺陷在某种程度上可能有助于创建不安全的软件,但软件的整体安全性仍然在很大程度上取决于开发者的安全意识。Perl也有安全“陷阱”,然而大多数Perl程序员并不了解这些陷阱。
王驭停
2021/08/27
2.7K0
pycharm如何在运行时打开控制台[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/173186.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/25
1K0
pycharm如何在运行时打开控制台[通俗易懂]
MFC查找指定文件是否存在,PathFileExists 函数[通俗易懂]
PathFileExists函数参数传入的要包含文件名(含文件格式)。 存在该文件,则返回TRUE, 相反,返回FALSE. 调用函数,传参
全栈程序员站长
2022/09/14
2.2K0
知识分享之Golang——基于Golang的文件夹是否存在、文件是否存在函数
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
cn華少
2022/06/08
1.2K0
如何判断Javascript对象是否存在
Javascript语言的设计不够严谨,很多地方一不小心就会出错。 举例来说,请考虑以下情况。 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明。用自然语言描述的算法如下:   if (myObj不存在){     声明myObj;   } 你可能会觉得,写出这段代码很容易。但是实际上,它涉及的语法问题,远比我们想象的复杂。Juriy Zaytsev指出,判断一个Javascript对象是否存在,有超过50种写法。只有对Javascript语言的实现细节非常清楚,才可能分
ruanyf
2018/04/12
2.8K0
matlab通过exist函数判断数据、函数、文件等是否存在
在 MATLAB 中,exist 函数用于检查指定的变量、函数、文件或目录是否存在。它返回一个整数值,用于表示存在的对象的类型或存在的情况。
用户9925864
2023/09/05
2K0
matlab通过exist函数判断数据、函数、文件等是否存在
如何在运行时动态添加和删除Qt Widgets
在油管上看到一篇关于Qt的视频:[How to Add & Remove Qt Widgets Dynamically at Runtime](https://www.youtube.com/watc
ccf19881030
2021/06/29
4K0
如何判断js函数存在
最近开发一款应用插件,兼容pjax会调用函数加载播放器,但是有时候页面没有音乐就不需要加载播放器,这时候调用函数就会报错。
乔千
2020/04/14
7.7K0
如何快速准确的验证QQ邮箱是否开通,是否存在?
QQ是国内比较大的公共邮箱之一,做国内邮件营销的企业,无法避免需要做QQ邮件营销。既然是比较大的公共邮箱,那么群发邮件到达收件箱的难度也是比较有挑战性的。
用户2411043
2019/03/03
4.2K0
如何确定EasyCVR本地流媒体是否启动成功?
EasyCVR视频协议融合平台不仅支持常规协议的接入,我们还拓展了海康SDK、大华SDK、Ehome等私有协议。如果前端设备协议不同且数量较多,则可以通过EasyCVR平台来对所有视频通道做整合和统一管理。而且,EasyCVR提供了丰富的API接口,用户均可通过接口文档进行调用。
TSINGSEE青犀视频
2021/11/11
6620
如何在运行时(Runtime)获得泛型的真正类型
由于Java 的类型擦除机制,在编译时泛型都被转为了Object,例如List<String>经过编译之后将变为类型 List。可以通过以下的方式再运行时获得泛型的真正类型
用户3148308
2018/12/04
2.9K0
在运行时与构建时如何保护云计算基础设施
在当今的云原生世界中,随着基础设施的飞速发展,大规模构建云计算环境需要可再现性和弹性,因此需要从一开始就优先考虑快速更改和扩展基础设施的能力。
静一
2020/07/16
1.2K0
【DB笔试面试481】如何判断SCHEDULER JOB是否正在运行?
可以查询DBA_SCHEDULER_JOBS视图的STATE列,若STATE列的值为RUNNING,则代表当前的JOB正在运行。或者通过查询视图DBA_SCHEDULER_RUNNING_JOBS,该视图中的JOB即正在运行的JOB。如下所示,作者给出一个具体的SQL用于查询:
AiDBA宝典
2019/09/30
1.3K0
sqlserver 各种判断是否存在(表名、函数、存储过程.......)
库是否存在 if exists(select * from master..sysdatabases where name=N'库名') print 'exists' else print 'not exists' --------------- -- 判断要创建的表名是否存在 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable')
lpxxn
2018/01/31
1.9K0
Python 检测成员函数、成员变量是否存在的方法
AttributeError: A instance has no attribute 'fun2'
用户9127725
2022/08/08
2.8K0
如何判断Python字典中是否存在某个key
在Python中有各种数据结构,而字典是我们生产中经常会用到的数据结构,这里记录一下如果判断某个key是否存在于字典中的二种方法。
后场技术
2020/09/03
20.4K0
在 jQuery 中如何判断对象是否存在
如果是下面的 jQuery 代码判断一个对象是否存在,是不能用的。 if($("#id")){ }else{} 因为 $("#id") 不管对象是否存在都会返回 object 。 正确使用判断对象是否存在应该用: if($("#id").length>0){}else{} 使用 jQuery 对象的属性 length 来判断,如果 > 0 就存在。 或者 if($("#id")[0]){} else {} 或者直接使用原生的 Javascript 代码来判断: if(document.getElement
Denis
2023/04/15
3.2K0
点击加载更多

相似问题

是否可以确定(在运行时)某个函数是否已经实现?

32

如何确定Perl 6数组中是否存在元素

35

在运行时检查程序中是否存在函数

10

如何确定JNI (jogl)在运行时是否可用?

20

如何确定块在运行时是否同步运行

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文