2011-06-24 9 views
0

Perl/Fastcgiの新機能です。pmモジュールにファイルを含める

多くのスクリプトを追加しなければならないpmモジュールがいくつかありますが、時間の経過とともにそのモジュールは成長し、成長します。したがって、私は管理者を容易にする構造が必要です。

私は含めることができる何らかの種類のディレクトリ構造でファイルを作成したいと思います。私がインクルードするファイルにテキストが書かれているように、私がインクルードするファイルが欲しいと思います。

私は 'do'、 'use'、 'require'を試しました。実際のファイルは、Perlが探しているディレクトリの1つにあります(perl -Vを使って検証済み)

私はBEGIN {}内外で試しました。

どうすればよいですか? pmファイルのpmファイルを含めてすべて可能ですか?それは私が含むpmファイルでなければならないのですか、それとも拡張子にすることができますか?

私はいくつかの方法を試しました、以下に私の最後の試みです。

Config.pm私はこれに関連するApacheのerror_logの中に何らかのエラーが届かない

# Filter Queues 

$Self->{TicketAcl}->{'ACL-hide-queues'} = { 
       Properties => { 
}, 
       PossibleNot => {Ticket => { Queue => 
        ['[RegExp]^*'] }, 

    }, 
}; 
1; 

package Kernel::Config; 

sub Load { 

#other activities 

require 'severalnines.pm'; 

#other activities 

} 
1; 

severalnines.pm。それでも、コードをConfig.pmファイルに入れると、コードは認識されません。

私はたくさんのプログラミングを始めようとしていません。第三者のアプリケーションで管理者をしてください。それでも、私はファイルを含めてどのように動作するのかを調べようとしています。 somenines.pmはperlモジュールと見なされ、h2xsなどのプログラムを使用してモジュールを "作成"する必要がありますか?

ありがとうございます!

+1

あなたがしようとしたことがあり'require '/ full/path/to/file.foo''?これらのスクリプトがすべて真の値を返すようにしましたか(通常、ファイルの最後に '1;'をつけることで実現します)。また、それはパールではなく、パールです。あなたはApacheのエラーログをチェックしようとしましたか?失敗した 'require'は、エラーをstderrに発行するプロセスをクラッシュさせます。 – unpythonic

+0

ありがとう!私は1を加えました。私はそれを持っていなかったので。ファイルが見つかりましたが、コードは使用されていないと思います。私の更新されたポストをコードでご覧ください。 – Nicsoft

+0

私があなたの提案をしても、私が含まれているものを使用するためには、まだコーディングを行う必要があります。私の要点は、Config.pmファイル内で何らかの他の処理をする必要がないことです。私は、サーバーの側面を調べなければならないのですか? – Nicsoft

答えて

0
if ( 'I want the files that I include will be exactly like if the text were written in the file where I do the include.' 
    && 'have to add a lot of scripts and over time it will grow and grow') { 
    warn 'This is probably a bad idea because you are not creating any kind of abstraction!'; 
} 

Exporterをご覧ください。おそらく良い解決策になります。

3

私は通常、私自身のモジュール接頭辞を作成します - プロジェクトの名前または私が働いた場所の名前を付けました。たとえば、Mu::FooMu::Barという名前のモジュールを使用してすべてをMuの下に置くことができます。複数のモジュールを使用する(1つのファイルにすべてを保存しないでください)、末尾に*.pmのモジュール名を付けます。

Muディレクトリは、あなたのプログラムと同じディレクトリにある場合次に、あなただけのこれを実行する必要があります。

use Mu::Foo; 
use Mu::Bar; 

彼らは別のディレクトリにいる場合は、あなたがこれを行うことができます:

use lib qw(/path/to/other/directory); 
use Mu::Foo; 
use Mu::Bar; 

pmファイル内にpmファイルを含めても可能ですか?

どうしてでしょうか。

私は含めることができるいくつかの種類のディレクトリ構造でファイルを作成したいと思います。私がインクルードするファイルにテキストが書かれているかのように、インクルードするファイルにexacltyが欲しい。

これは悪い、悪い考えです。パッケージメカニズムを使用する方がよいでしょう。つまり、各モジュールを別のパッケージ名として宣言します。さもなければ、あなたのモジュールには、あなたのスクリプトが上書きする変数または関数があり、決してそれを知ることはありません。

Perlでは、モジュールの変数の前にモジュール名を付けることで、モジュール内の変数を参照できます。 (File::Findがないような。たとえば$File::Find::Nameのために見つかったファイルの名前です。これは、あなたの名前空間を汚染しない。

あなたが本当にあなたのモジュールの関数や変数をしたい場合は、あなたの名前空間には、Exporter@EXPORT_OKリスト変数を見てください。これをモジュールの名前空間にインポートするすべての変数と関数のリストですが、自動ではないので、useのステートメントの隣にリストする必要があります。あなたのモジュールでは、次のように入力します:

package Mu::Foo; 
use Exporter qw(import); 
our EXPORT_OK = qw(convert $fundge @ribitz); 

あなたのプログラムでは、 UT:彼らはあなたのメインプログラムの一部であるかのように

use Mu::Foo qw(convert $fundge @ribitz); 

今、あなたはconvert$fundge@ribitzにアクセスすることができます。しかし、今では、これらのサブルーチンと変数をMu::Fooから引き出していることを文書化しました。

(あなたはこれが複雑であると思われる場合、私はあなたが本当にあなたのモジュールにオブジェクト指向のメソッドを使用する必要があることを教えてくれませんでした。それは実際にそれを行うための最善の方法だ喜んでいる。)

+0

ディレクトリを指す['PERL5LIB'](http://perldoc.perl.org/perlrun.html#ENVIRONMENT)環境変数を定義することで、このプロセスのいくつかを緩和することができます。これは、あなたの' @INC '。今度はすべてのカスタム '.pm'ファイルをこのディレクトリに置き、インストールされているかのように使用することができます。 –

+0

ありがとうございます。私はコードで私のポストでいくつかの更新を行った。ファイルが見つかりましたが、コードが適用されていません。 – Nicsoft

関連する問題