如何使用 Perl 模块中的常量?

发布于 2024-07-06 16:44:40 字数 63 浏览 3 评论 0原文

如果我在 Perl 模块中定义一个常量,我如何在我的主程序中使用该常量? (或者我如何在主程序中调用该常量?)

If I define a constant in a Perl module, how do I use that constant in my main program? (Or how do I call that constant in the main program?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

十年不长 2024-07-13 16:44:40

常量可以像其他包符号一样导出。 使用标准 Exporter 模块,您可以从 然后,

package Foo;
use strict;
use warnings;

use base 'Exporter';

use constant CONST => 42;

our @EXPORT_OK = ('CONST');

1;

在客户端脚本(或其他模块)中,

use Foo 'CONST';
print CONST;

您可以使用 %EXPORT_TAGS 哈希(请参阅导出器文档)来定义可以使用单个导入参数导出的常量组。

更新:这里是一个示例,说明如果您有多个常量,如何使用 %EXPORT_TAGS 功能。

use constant LARRY => 42;
use constant CURLY => 43;
use constant MOE   => 44;

our @EXPORT_OK = ('LARRY', 'CURLY', 'MOE');
our %EXPORT_TAGS = ( stooges => [ 'LARRY', 'CURLY', 'MOE' ] );

然后你可以说

use Foo ':stooges';
print "$_\n" for LARRY, CURLY, MOE;

Constants can be exported just like other package symbols. Using the standard Exporter module, you can export constants from a package like this:

package Foo;
use strict;
use warnings;

use base 'Exporter';

use constant CONST => 42;

our @EXPORT_OK = ('CONST');

1;

Then, in a client script (or other module)

use Foo 'CONST';
print CONST;

You can use the %EXPORT_TAGS hash (see the Exporter documentation) to define groups of constants that can be exported with a single import argument.

Update: Here's an example of how to use the %EXPORT_TAGS feature if you have multiple constants.

use constant LARRY => 42;
use constant CURLY => 43;
use constant MOE   => 44;

our @EXPORT_OK = ('LARRY', 'CURLY', 'MOE');
our %EXPORT_TAGS = ( stooges => [ 'LARRY', 'CURLY', 'MOE' ] );

Then you can say

use Foo ':stooges';
print "$_\n" for LARRY, CURLY, MOE;
蓝天白云 2024-07-13 16:44:40

常量只是具有空原型的子项,因此可以像任何其他子项一样导出它们。

# file Foo.pm
package Foo;
use constant BAR => 123;
use Exporter qw(import);
our @EXPORT_OK = qw(BAR);


# file main.pl:
use Foo qw(BAR);
print BAR;

Constants are just subs with empty prototype, so they can be exported like any other sub.

# file Foo.pm
package Foo;
use constant BAR => 123;
use Exporter qw(import);
our @EXPORT_OK = qw(BAR);


# file main.pl:
use Foo qw(BAR);
print BAR;
琉璃梦幻 2024-07-13 16:44:40

为了扩展之前的答案,由于常量实际上只是子项,因此您也可以直接调用它们:

use Foo;
print Foo::BAR;

To expand on the earlier answers, since constants are really just subs, you can also call them directly:

use Foo;
print Foo::BAR;
橙味迷妹 2024-07-13 16:44:40

您可能需要考虑使用 Readonly 而不是常量。

You might want to consider using Readonly instead of constant.

软糖 2024-07-13 16:44:40
package Foo;
use Readonly;
Readonly my  $C1 => 'const1';
Readonly our $C2 => 'const2';
sub get_c1 { return $C1 }
1;

perl -MFoo -e 'print "$_\n" for Foo->get_c1, $Foo::C2'
package Foo;
use Readonly;
Readonly my  $C1 => 'const1';
Readonly our $C2 => 'const2';
sub get_c1 { return $C1 }
1;

perl -MFoo -e 'print "$_\n" for Foo->get_c1, $Foo::C2'
倾城花音 2024-07-13 16:44:40

为了增加技巧,由于常量只是一个子例程,您甚至可以将其作为类方法调用。

package Foo;
use constant PI => 3.14;

print Foo->PI;

如果你有很多常量,这是一种很好的方法来获取偶尔的常量,而不必将它们全部导出。 但是,与 Foo::PI 或导出 PI 不同,Perl 不会编译出 Foo->PI,因此您会产生方法的成本打电话(这可能并不重要)。

To add to the bag of tricks, since a constant is just a subroutine you can even call it as a class method.

package Foo;
use constant PI => 3.14;

print Foo->PI;

If you have lots of constants it's a nice way to get at the occasional one without having to export them all. However, unlike Foo::PI or exporting PI, Perl will not compile out Foo->PI so you incur the cost of a method call (which probably doesn't matter).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文