Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl从不同的包访问包常量_Perl - Fatal编程技术网

Perl从不同的包访问包常量

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"; 你不断的声明是错误的 常量的名称前没有$

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

有没有一种方法不需要任何附加库(禁止使用任何附加库)就可以从另一个包中的一个包访问变量

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";