在perl中处理项目级变量的最佳方法是什么
我被要求研究如何将一堆ksh脚本转换成perl。现在,所有系统变量都是从一个公共文件(URL、数据库用户名等)导出的 我的问题是在perl中,处理这些变量的最佳方法是什么在perl中处理项目级变量的最佳方法是什么,perl,oop,Perl,Oop,我被要求研究如何将一堆ksh脚本转换成perl。现在,所有系统变量都是从一个公共文件(URL、数据库用户名等)导出的 我的问题是在perl中,处理这些变量的最佳方法是什么 另外,我喜欢使用ini文件,但我需要一个ini文件阅读库(这里的人不喜欢) 我将使用与您的ksh脚本类似的概念 创建一个公共包文件,其中所有设置都作为包our变量。 e、 g.ProjConfig.pm包含 package ProjConfig; use strict; use warnings; our $BaseUrl
另外,我喜欢使用ini文件,但我需要一个ini文件阅读库(这里的人不喜欢) 我将使用与您的ksh脚本类似的概念 创建一个公共包文件,其中所有设置都作为包
our
变量。
e、 g.ProjConfig.pm
包含
package ProjConfig;
use strict;
use warnings;
our $BaseUrl = 'http://www.fred.com/';
our $DbName = 'TheDB';
1;
#!/usr/bin/perl
use strict;
use warnings;
use ProjConfig;
{
my $db = someConnectFunction( $ProjConfig::DbName );
# do stuff
}
然后您的调用代码简单地引用这些具有限定名称的变量。
e、 g.program.pl
包含
package ProjConfig;
use strict;
use warnings;
our $BaseUrl = 'http://www.fred.com/';
our $DbName = 'TheDB';
1;
#!/usr/bin/perl
use strict;
use warnings;
use ProjConfig;
{
my $db = someConnectFunction( $ProjConfig::DbName );
# do stuff
}
您可以使用配置文件,并在需要时随时读取它
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'.
为了扩展我的评论,下面是一个示例配置模块
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
如果您阅读了,您将看到如何使用
@EXPORT\u OK
和%EXPORT\u标记
对常量进行分类,避免过多地污染调用包的名称空间。Config::Any将愉快地使用INI文件(和许多其他常见格式),并让这里的人们感到高兴。;)或者,如果您愿意,可以使用来读取.ini
格式化文件。@Bill:如果您的公司不喜欢配置模块,那么很难猜测您有哪些可用选项。你可以把Config/Tiny.pm
放到你的程序目录中,告诉他们是你自己写的!否则,我建议使用一个Perl模块,比如说MyConfig.pm
,该模块将Exporter
子类化,并导出所有常量。这看起来像是对名称空间的大量污染。@daotoad:尽可能少或多。您可以选择导入所有内容,也可以不导入任何内容,并将值引用为MyConfig::URL
等。