加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

无法在perl代码库中找到函数定义

发布时间:2020-12-15 23:27:06 所属栏目:大数据 来源:网络整理
导读:我正在翻阅7900行perl代码.我需要改变一些事情,事情进展顺利,即使我只有36个小时进入perl.我学习了语言的基本结构,并且能够完成小事.但突然之间我发现了一个函数调用,它在任何地方都没有任何定义.我多次grep’ed检查所有’sub’.我找不到函数定义.我错过了什
我正在翻阅7900行perl代码.我需要改变一些事情,事情进展顺利,即使我只有36个小时进入perl.我学习了语言的基本结构,并且能够完成小事.但突然之间我发现了一个函数调用,它在任何地方都没有任何定义.我多次grep’ed检查所有’sub’.我找不到函数定义.我错过了什么?这个函数的定义在哪里.我很确定这是一个用户定义的函数,而不是库函数(从我的名字我猜这个).
请帮我找到这个函数的定义.

这是函数用法的几行.

(cfg_machine_isActive($ep)) {
         staf_var_set($ep,VAR_PHASE,PHASE_PREP);
         staf_var_set($ep,VAR_PREP,STATE_RUNNING);
      } else {
         cfg_machine_set_state($ep,STATE_FAILED);
      }
   }
   $rc = rvt_deploy_library();       #this is the function that is the problem 
   dump_states() unless ($rc != 0);

这是答案:

(我不能发布这个答案本身因为我没有足够的声誉)

我发现在perl中找到导入函数定义的最快方法是以下命令:

>perl.exe -d <filename>.pl

这启动了调试器.
然后;做

b <name of the function/subroutine who's definition you are looking for>

在我们的情况下,这将意味着进入:

b rvt_deploy_library

接下来按“c”跳转到上述功能/子程序.

这使调试器具有所需的功能.现在,您可以看到行号.以及控制台上的函数/子例程的位置.

main::rvt_deploy_library(D:/CAT/rvt/lib/rvt.pm:60):

解决方法

在Perl中声明方法有很多种方法.这是一个几乎肯定不完整的清单:

>标准方式,例如.子名称{…}
>使用MooseX :: Method :: Signatures,方法NAME(…){…}
>分配给一个typeglob,例如. * NAME = sub {…};

此外,如果包声明了AUTOLOAD函数,则可能没有明确的方法定义.有关更多信息,请参见perlsub.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读