gpt4 book ai didi

perl - 在 OOP Perl 中调用子例程

转载 作者:行者123 更新时间:2023-12-04 09:56:22 27 4
gpt4 key购买 nike

在查看我接管的一些代码时,我遇到了这一行:

 my @files = My::Module::DB::raw_info->search_like(customer_handle => $config->{client}, feed => $config->{site}, arrival =>"$date")

我知道这会从一个名为 My::Module::DB::raw_info 的包中返回一个数组。 .

我不确定(我只是在学习 OOP)是什么 ->search_like指。

我在 My::Module::DB::raw_info 中没有将其视为变量或子程序。

任何提示将不胜感激。我才刚刚开始学习这些东西。这就像沐浴在火中。 (我知道我以后会更快乐)哎呀!

最佳答案

这可能是由于从基类继承的方法。然而,在极其奇怪的情况下,它也可以动态地注入(inject)到模块的命名空间中,这很难弄清楚。

您可以通过蛮力搜索或通过找出模块的基类(可能是继承链的更高层)并仅搜索基类代码来找到您的子。我将展示如何做到这两点:

暴力搜索 : 这大概是最简单的解决方案在复杂的情况下,因为子可能已经被非祖先模块动态注入(inject)到模块的命名空间中,并且由于可以使用多种定义继承的方式(使用基础,使用父级,Moose 的东西),找到祖先模块并不是 100% 容易,自动加载的东西)

首先,找出哪些其他模块加载了 My::Module

perl -e 'use My::Module::DB::raw_info; print "$INC{$_}\n" foreach keys %INC'

这将打印所有这些模块的位置

然后,在所有该代码中搜索子定义(以下应该都是一行,为了便于阅读,我将其拆分为 2 行):
grep search_like 
`perl -e 'use My::Module::DB::raw_info; print "$INC{$_}\n" foreach keys %INC'`

如果返回的结果太多,请将 grep 更改为
grep "sub search_like"
`perl -e 'use My::Module::DB::raw_info; print "$INC{$_}\n" foreach keys %INC'`

这将为您找到 My::Module::DB::raw_info 继承自哪个模块中的定义,而无需实际分析模块代码以进行继承。

继承 :

使用 ISA 找出模块的父级如下:
perl -e 'use My::Module::DB::raw_info; print "@My::Module::DB::raw_info::ISA\n";'

澄清一下,这只适用于使用 @ISA 的“经典继承”模块。 ,而不是驼鹿的东西。如果使用 AutoLoader 调用例程或动态注入(inject)符号表(这可能发生在任何代码中,不一定在父代码中),它也不起作用。

关于perl - 在 OOP Perl 中调用子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4034524/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com