Perl从不同的包访问包常量

时间:2013-08-23 08:04:15

标签: perl

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

是否有一种方法没有任何额外的库(禁止使用任何额外的lib)从另一个包中访问变量?

package Class;

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

# ...
# class methodes
# ...

package main;

print Class::$CONSTANT ."\n";

3 个答案:

答案 0 :(得分:3)

您的常量声明错误

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

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

use constant CONSTANT => "Foo";

访问类常量

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

Class::CONSTANT # I suggest NOT using this as 'Class::Constant' is a module name, rename your class to something useful

或者,如果您将$obj作为Class的实例:

$obj->CONSTANT;

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

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'

And a demo

答案 1 :(得分:2)

容易犯错。将符号放在类名前面,例如

print ${Class::CONSTANT} . "\n";
print $Class::CONSTANT . "\n";

此外,可以使用constant包定义常量,例如

use constant MY_CONSTANT => 5;
print MY_CONSTANT();

答案 2 :(得分:1)

您必须使用our定义变量。

package Class;

our $CONSTANT = 'foo';

# ...
# class methodes
# ...

package main;

print $Class::CONSTANT ."\n";

关键字package用作语法块,因此在此语法块之外无法访问使用my定义的变量。您还必须将符号$放在正确的位置。当然,它是可变的,而不是恒定的。