Perl 从不同包访问包常量

Hol*_*gos 4 perl

我是 Perl 新手,现在正在学习 Perl 中的 OOP。

有没有一种方法不需要任何额外的库(禁止使用任何额外的库)来访问另一个包中一个包中的变量?

package Class;

my $CONSTANT = 'foo'; # this doesn't work, neither our $CONSTANT ..

# ...
# class methodes
# ...

package main;

print Class::$CONSTANT ."\n";
Run Code Online (Sandbox Code Playgroud)

Gli*_*ire 5

你的常量声明是错误的

常量的名称前没有$,因为它们不是变量——变量(如名称所暗示的)包含一个可以变化的值。

试试这个(它使用该constant模块,但它包含在默认安装中:

use constant CONSTANT => "Foo";
Run Code Online (Sandbox Code Playgroud)

访问类常量

然后您可以通过以下方式访问它们:

Class::CONSTANT # I suggest NOT using this as 'Class::Constant' is a module name, rename your class to something useful
Run Code Online (Sandbox Code Playgroud)

或者,如果您有$obj以下实例Class

$obj->CONSTANT;
Run Code Online (Sandbox Code Playgroud)

显示两种访问方法的示例代码

use warnings;
use strict;

package MyClass;
use constant SOME_CONSTANT => 'Foo';
sub new
{
   my $type = shift;                   # The package/type name
   my $self = {};                      # Empty hash
   return bless $self, $type;
}

package main;
print MyClass::SOME_CONSTANT . "\n";   # Prints 'Foo\n'

my $obj = MyClass->new();
print $obj->SOME_CONSTANT;             # Prints 'Foo'
Run Code Online (Sandbox Code Playgroud)

还有一个演示