たくさんのkshスクリプトをperlに切り替えることを検討するように頼まれました。現在、すべてのシステム変数は共通ファイル(URL、データベースユーザー名など)からエクスポートされています。
私の質問は、これらの変数を処理するための最良の方法は何ですか?
PS。私はiniファイルを使用するというアイデアが好きですが、それからiniファイル読み取りライブラリが必要です(ここの人々はこれを好まないでしょう)。
私のコメントを拡張するために、MyConfig.pm
2つの定数をエクスポートする設定モジュールの例を次に示します。
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
のドキュメントExporter
を読むと、定数の使用方法@EXPORT_OK
と分類方法がわかり%EXPORT_TAGS
、呼び出し元のパッケージの名前空間を過度に汚染しないようにすることができます。
設定ファイルを使用して、必要なときにいつでも読み込むことができます。
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'.
私はあなたの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
}