【问题标题】:How can I set a Java-like "static variable" in Perl that can be accessed by other classes ? [closed]如何在 Perl 中设置其他类可以访问的类似 Java 的“静态变量”? [关闭]
【发布时间】:2014-06-06 20:18:28
【问题描述】:

我有两个类 A 和 B,我需要在 A 类中设置一个静态变量(如 Java 中的静态变量),并从 B 类访问该变量(在 Java 中使用 ClassName.variable 名称)。我可以在 Perl 中做这样的事情吗?

提前致谢

【问题讨论】:

  • 使用our将变量声明为包一(即package A; our $foo = 1,然后通过包名解析访问它(print $A::foo;
  • 包也可以导出,如果你愿意的话。
  • 也就是说,通常最好使用访问器。
  • @SriSri:是的。这就像在 Java 中添加 import
  • @SriSri:如果您已经解决了问题,那么请接受其中一个答案,或者如果没有一个答案有帮助,请自己写(并接受)

标签: perl variables static


【解决方案1】:
tree . 
    ├── foo.pl
    └── lib
         ├── A.pm
         └── B.pm


cat lib/A.pm 
package A;
use strict;
use warnings;
our $foo = 7;
1;


cat lib/B.pm 
package B;
use strict;
use warnings;
use feature qw/ say /;
use A;
say $A::foo;
1;


cat foo.pl 
#!/usr/bin/env perl
use strict;
use warnings;
use B;


perl -Ilib foo.pl 
7

【讨论】:

  • @SriSri ...只需将此答案用作我上面的文档参考类型答案的代码示例:-)
  • 已添加,抱歉,我确实添加了可以解决问题但未标记的评论。谢谢
【解决方案2】:

我真的不了解 Java,所以我猜您所说的“静态变量”是指范围界定吗?在 perl 中,'my' 和 'our' 是您可以控制范围的方式,但我相信我说帽子包/模块使变量的范围“私有”到它们在其中声明的 .pm 文件是正确的(更正这个和/或进一步详细说明 perlistas!)。

至于如何“访问”它们,嗯,我的 Programming Perl (2nd Edition) 副本在第 2 章的 Scoped Declarations 部分中对此进行了介绍。但这是第 107 页第一个脚注的精练(略微编辑)部分:

库、模块和类使用包来存储它们自己的私有数据,这样它就不会与主程序中的数据冲突。如果你看到有人写$Some::stuff,他们正在使用包Some 中的$stuff 标量变量。

Exporter 文档和perlmonks node about global variables 可能会帮助您更清楚地思考 perl 中的变量和范围。经典的 perlmonks 节点 - Variable Scoping in Perl: the basics - 是一个经常查阅的参考 :-)

如果您已经知道如何编程(即在 Java 中),有时另一个关于“如何”在 Perl 中做事的好参考(只是略微过时)是Perl Cookbook - 您可以从中摘录网上找。

干杯,

【讨论】:

  • 很棒的信息,我很擅长 @java 编程,需要为一些问题添加 Perl 代码,您添加的非常有用的信息..谢谢。
  • 如果您有时间观看一小时关于命名空间(以及其他主题)的讨论,请参阅 Bruce Gray 在 YAPC::NA 2012 上的演讲 - The why of my()。里面有一个很好的故事,讲述了一个漂亮的专家 perl 程序员如何围绕 perl 和命名空间。
猜你喜欢
  • 2023-03-06
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 2017-10-28
相关资源
最近更新 更多