我被要求研究将一堆ksh脚本切换到perl。现在,所有系统变量都是从公共文件(URL,数据库用户名等)导出的。
我的问题是perl处理这些变量的最佳方法是什么?
PS。我喜欢使用ini文件的想法,但后来我需要一个ini文件阅读库(这里的人不喜欢)。
答案 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'.