在perl中处理项目级变量的最佳方法是什么

时间:2012-07-09 16:16:33

标签: perl oop

我被要求研究将一堆ksh脚本切换到perl。现在,所有系统变量都是从公共文件(URL,数据库用户名等)导出的。

我的问题是perl处理这些变量的最佳方法是什么?

PS。我喜欢使用ini文件的想法,但后来我需要一个ini文件阅读库(这里的人不喜欢)。

3 个答案:

答案 0 :(得分:3)

为了扩展我的评论,这是一个示例配置模块MyConfig.pm,它导出两个常量。

package MyConfig;

use strict;
use warnings;

use base 'Exporter';

our @EXPORT = ( qw/ URL USERNAME / );

use constant URL => 'http:/domain.com/';
use constant USERNAME => 'myuser';

1;

以及使用它的程序文件

use strict;
use warnings;

use MyConfig;

print URL, "\n";
print USERNAME, "\n";

<强>输出

http:/domain.com/
myuser

如果您阅读documentation on Exporter,您将看到如何使用@EXPORT_OK%EXPORT_TAGS对常量进行分类,并避免过多地污染调用包的命名空间。

答案 1 :(得分:0)

我会使用与你的ksh脚本相似的概念。

创建一个公共包文件,其中包含所有设置作为包our个变量。 例如ProjConfig.pm包含

package ProjConfig;

use strict;
use warnings;

our $BaseUrl = 'http://www.fred.com/';
our $DbName = 'TheDB';

1;

然后您的调用代码只是使用限定名称引用这些变量。 例如program.pl包含

#!/usr/bin/perl

use strict;
use warnings;

use ProjConfig;

{
    my $db = someConnectFunction( $ProjConfig::DbName );
    # do stuff
}

答案 2 :(得分:0)

您可以使用配置文件并在需要时随时阅读。

use Config::Merge;

my $config = Config::Merge->new ( '/path/to/config_file.yml' );

my $file = $config->C('filename');

这将在yaml配置文件中读取,这将导致yaml 结构可用作perl哈希。

yaml文件可能类似于:

db:
  name: db_name
  url : 192.168.1.1 

返回文件:

print $file->{db}{name}  would print out 'db_name'.