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

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

#====================================================
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");
#====================================================

从子例程内部,有一种方法可以“大致”地知道子例程收到了什么样的调用?

最佳答案

您可以使用Devel::Caller中的called_as_method

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/

10-11 22:36