1

たくさんのkshスクリプトをperlに切り替えることを検討するように頼まれました。現在、すべてのシステム変数は共通ファイル(URL、データベースユーザー名など)からエクスポートされています。

私の質問は、これらの変数を処理するための最良の方法は何ですか?

PS。私はiniファイルを使用するというアイデアが好きですが、それからiniファイル読み取りライブラリが必要です(ここの人々はこれを好まないでしょう)。

4

3 に答える 3

3

私のコメントを拡張するために、MyConfig.pm2つの定数をエクスポートする設定モジュールの例を次に示します。

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、呼び出し元のパッケージの名前空間を過度に汚染しないようにすることができます。

于 2012-07-09T16:58:52.817 に答える
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'.
于 2012-07-09T16:40:37.790 に答える
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
}
于 2012-07-09T16:24:00.740 に答える