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

Die*_*via 6 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");
#====================================================
Run Code Online (Sandbox Code Playgroud)

有一种方法,从子程序内部,知道"一般",子接收了什么样的调用?

Cha*_*hak 2

您可以使用called_as_methodDevel ::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";
}
Run Code Online (Sandbox Code Playgroud)

输出:

object: Opa Opa -- uno
object: Opa Opa -- uno
class: Opa uno -- segundo
class: Opa Opa -- uno
Run Code Online (Sandbox Code Playgroud)