perl - 在 Perl 中导出变量是一种好习惯吗?

标签 perl variables export

我发现通过使用 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/

相关文章:

C# 导出带分号的 CSV 文件

excel - 将 Excel 图表导出到 SVG 创建一个空文件

java - Highcharts 导出 Web war 在 Weblogic 服务器上不起作用

perl - 如何使用对安装在非标准位置的 Perl 模块的依赖?

perl - 单台机器最快的 Perl IPC/消息队列是什么?

macos - 在 Swift 中的函数之间共享变量

mysql - 根据函数的结果设置变量的值 - MySQL

java - 如何使用字符串作为变量?

mysql - 当文件添加到目录时,如何让 Windows 批处理或 Perl 脚本运行?

windows - 使用 Perl DBI 模块或设置系统 DSN 并使用 ODBC 哪个更好?