我是Perl的新手,我现在正在Perl学习OOP。
是否有一种方法没有任何额外的库(禁止使用任何额外的lib)从另一个包中访问变量?
package Class;
my $CONSTANT = 'foo'; # this doesn't work, neither our $CONSTANT ..
# ...
# class methodes
# ...
package main;
print Class::$CONSTANT ."\n";
答案 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'
答案 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
定义的变量。您还必须将符号$
放在正确的位置。当然,它是可变的,而不是恒定的。