perl - 如何检查是否使用对象调用方法调用了子例程

标签 perl object subroutine method-invocation

您可以使用以下示例中的两种语法将子例程作为方法调用。

但是您也可以不将其作为对象来调用。

#====================================================
package Opa;
sub opa{
    $first= shift;
    $second= shift;
    print "Opa $first -- $second\n";
}

package main;
# as object:
Opa->opa("uno");
opa Opa ("uno");
# not as object
Opa::opa("uno","segundo");
Opa::opa("Opa","uno");
#====================================================

它有一种方法,从子程序内部,“一般地”知道子程序收到了什么样的调用?

最佳答案

您可以使用 called_as_method来自 Devel::Caller .

use Devel::Caller qw( called_as_method );
sub opa{
    print called_as_method(0) ? 'object: ' : 'class: ';
    $first= shift;
    $second= shift;
    print "Opa $first -- $second\n";
}

输出:
object: Opa Opa -- uno
object: Opa Opa -- uno
class: Opa uno -- segundo
class: Opa Opa -- uno

关于perl - 如何检查是否使用对象调用方法调用了子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39956702/

相关文章:

perl - 为什么 CGI.pm 仍然使用 "\0"作为空字符,而它在 Perl 中被视为普通字符?

perl - 在 Perl 中模拟父类(super class)调用(使用 Test::MockObject)

javascript - 无法创建多个嵌套对象 JS。 "Unexpected identifier"

perl - 可以在 perl 中定义一个变量,其值不能在子例程中更改吗?

perl - 这个对 Perl 模块中的子例程的调用是如何工作的?

javascript - 有什么好例子可以说明OOP和JavaScript程序编程之间的区别?

ruby - 如何使用 Ruby WIN32OLE 访问 Word 文档中的 TextBox 对象文本

perl - 如何将参数传递给使用 eval 定义的 Perl 子例程?

function - 动态创建函数/子程序的 AutoHotkey 热键

bash - 如何删除字符串中的最后一个分号?