2

私は、動的な Web サイトを作成するときに MySQL ファイルを操作する方法として、長年 perl を使用してきました。perl 4 の時代に自分のスキルを習得したので、必ずしも perl 5.10 で使用する方法ではないいくつかのプラクティスを採用しました。

そのような慣例の 1 つは、MySQL のユーザー名やパスワードなどの機密情報や静的情報を blah.cfg ファイルにグローバル スカラー変数として格納し、それをドキュメント ルートの外に配置することです。

次に、perl の上部近くに次の行があります。

require "./../../data/blah.cfg";

これにより、変数を使用してデータベースにアクセスできます。

私が追加したときに私の問題が始まりました:

use strict;
use warnings;

もちろん、これらのグローバル変数はエラーをスローするため、これらのグローバル変数を持つことはできません。そのため、今日何時間もの調査を行った後、情報を調べて、「require」を使用する必要がなくなり、代わりに「use」を使用する必要があることを発見したようです。ライブラリ、パッケージ、モジュールなどの火の洗礼のようです...そしてモジュールがパスの外にある場合は、FindBinを使用してそれを見つける必要があります-しかし、mod_perlを使用している場合はそうではありません...

2 つの単純な変数を保存し、それらを安全な方法で取得するための簡単で有効な方法はありますか?

4

3 に答える 3

1

実際の構成ファイル (および Config::Any のようなもの) を使用することもできますが、Perl モジュールを引き続き使用する場合は、適切に実行してください。

use strict;
use warnings;

package MyConfig;

use Exporter qw( import );

our @EXPORT = qw( %config );

our %config = (
   ...
);

1;

次に、使用できます

use MyConfig qw( %config );
... $config{...} ...

(「Config」をモジュール名として使用しないでください。既に存在します。)

于 2012-12-14T20:07:37.867 に答える
0

作成した perl モジュールにファイル パスを保存できます。次に、そのモジュールにゲッター メソッドを作成して、ファイル パスを返します。

メイン スクリプトで、そのモジュールを「使用」し、ファイル パスが必要なときにゲッターを呼び出します。

モジュールを使用すると、グローバル変数と同様に機能します。ファイル パスは 1 か所にしか保存されませんが (メンテナンスが向上します)、どこからでもアクセスできます (他のスクリプトからもアクセスできます)。

Perl については覚えていませんが、システム全体の一部である個別のスクリプトでモジュールを「使用」する必要があると思います。

于 2012-12-14T19:56:33.583 に答える
0

他のスクリプトではなく、構成ファイルに構成データを格納する方がはるかに良い考えです。構成ファイルを解析できるモジュールはかなりあります。

編集:

そもそも、なぜドキュメント ルート内にコードがあるのでしょうか? 機密性の高い構成の問題全体に関係なく、それは一般的に悪い考えのようです。

于 2012-12-14T19:58:44.540 に答える