如何从其子程序之一获取Perl模块的名称?

Eri*_*sum 2 perl perl-module

假设我有一个Perl模块My::Module:

package My::Module;

sub foo {
   return $module_name;
}
Run Code Online (Sandbox Code Playgroud)

我会怎么替换$module_name用得到My::Module

j.w*_*w.r 10

package My::Module;

sub foo {
   return __PACKAGE__;
}
Run Code Online (Sandbox Code Playgroud)

[更新]以下可能是您正在寻找的:

package My::Module;

sub new {
    my $self = {};
    bless $self;
    return $self;
}

sub foo {
    my $self = shift;
    return (caller(0))[3];
}

1;


# test 1: calling foo directly.
print "1: ", My::Module::foo, "\n";
# test 2:  instantiating object, then calling method of object instance.
my $x = My::Module->new;
print "2: ", $x->foo(), "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

$ perl test.pl
1: My::Module::foo
2: My::Module::foo
Run Code Online (Sandbox Code Playgroud)