我发现通过使用 Perl 的 use
传递配置和其他读取或计算一次但随后在整个程序中多次使用的数据非常方便。机制。我通过将哈希导出到调用者的命名空间来做到这一点。例如:
package Myconfiguration;
my %config;
sub import {
my $callpkg = caller(0);
my $expsym = $_[1];
configure() unless %config;
*{"$callpkg\::$expsym"} = \%config;
}
然后在其他模块中:
use MyConfiguration (loc_config_sym);
if ( $loc_config_sym{paramater} ) {
# ... do stuff ...
}
但是,我不确定这是否是最佳实践。添加一个返回带有数据的哈希引用的方法会更好吗?还有什么?
最佳答案
如果您只想读取 %config
的值,那为什么不给你一个例程呢?
my %config;
sub config_value
{
my ($value) = @_;
return $config{$value};
}
如果您愿意,您可以默认导出它:
package Mypackage;
require Exporter;
@EXPORT = qw/config_value/;
我不允许在许多不同的模块中到处访问散列的原因是我很难在精神上跟踪它正在使用的所有地方。我宁愿做上述类型的访问例程,这样,如果发生了一些错误,我可以在例程中添加一个 print 语句,或者其他东西,以找出何时访问该值。我不知道这是否与“最佳实践”有关,或者仅仅是因为我很愚蠢,但是全局变量造成的那种困惑让我感到害怕。
你也没有理由不能有一个固定的例程:
sub set_value
{
my ($key, $value) = @_;
$config{$key} = $value;
}
关于perl - 在 Perl 中导出变量是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593748/