Perl从不同的包访问包常量
我是Perl新手,现在正在学习Perl中的OOP 有没有一种方法不需要任何附加库(禁止使用任何附加库)就可以从另一个包中的一个包访问变量Perl从不同的包访问包常量,perl,Perl,我是Perl新手,现在正在学习Perl中的OOP 有没有一种方法不需要任何附加库(禁止使用任何附加库)就可以从另一个包中的一个包访问变量 package Class; my $CONSTANT = 'foo'; # this doesn't work, neither our $CONSTANT .. # ... # class methodes # ... package main; print Class::$CONSTANT ."\n"; 你不断的声明是错误的 常量的名称前没有$
package Class;
my $CONSTANT = 'foo'; # this doesn't work, neither our $CONSTANT ..
# ...
# class methodes
# ...
package main;
print Class::$CONSTANT ."\n";
你不断的声明是错误的
常量的名称前没有$
,因为它们不是变量——变量(如名称所示)包含的值可能不同
试试这个(它使用常量
模块,但默认安装中包括:
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
作为类的实例
:
$obj->CONSTANT;
显示两种访问方法的示例代码
.容易犯错误。将符号放在类名前面,例如
print ${Class::CONSTANT} . "\n";
print $Class::CONSTANT . "\n";
此外,可以使用常量
包定义常量,例如
use constant MY_CONSTANT => 5;
print MY_CONSTANT();
您必须使用
我们的
定义变量
package Class;
our $CONSTANT = 'foo';
# ...
# class methodes
# ...
package main;
print $Class::CONSTANT ."\n";
关键字
package
用作语法块,因此使用my
定义的变量在此语法块之外是不可访问的。您还必须将sigil$
放置在正确的位置。当然,它是可变的,而不是常量。我使用了“Class”就在这个例子中。谢谢。@Hologos这很好,但我需要把它放在那里,以防有人读到我的答案时认为给他们的类调用类是个好主意。你甚至没有指出$
符号表示的是变量而不是常量。我不明白你为什么会得到任何赞成票…@SweetieBelle我回答道承认你的观点;但是在这种情况下,OP特别询问如何访问变量。该变量名为常量
并不会改变它是一个变量的事实。它也可以工作。我会按照Sweete Belle和PP的建议坚持使用常量。
package Class;
our $CONSTANT = 'foo';
# ...
# class methodes
# ...
package main;
print $Class::CONSTANT ."\n";