2012-04-11 12 views
3

コマンドラインから実行するメインプログラムmytool.plがあります。いくつかの補助スクリプトspecial1.pl、special2.plなどがあります。それぞれには、サブルーチンとハッシュが含まれています。 MySpecialFunction()、AnotherSpecialFunction()、%SpecialDataという名前が付けられているとしましょう。perlスクリプトを使用すると、いくつかの副スクリプトの1つを使用します。

私は、コマンドラインオプションに従って、mytoolに特殊な* .plファイルの1つの内容をインクルード/使用/インポートするようにしたいと思います。

bash> perl mytool.pl --specialcase=5 

をしてmytoolsはspecial5.plからMySpecialFunction()を使用し、他のすべての特別* .plのファイルを無視します:たとえば、ユーザーが行います。

これは可能ですか?

使用する特殊ファイルの選択は実行時に行われるため、mytool.plの上部に「use」を追加することはおそらく適切ではないことに注意することが重要です。

注意私は長い時間のCプログラマであり、perlエキスパートではありません。私は明らかに何かを求めているかもしれません。 これは1ヶ月以内にほこりになる、ワンオフプロジェクトのためのものです。 mytool.plも特別な?.pl(またはperl自体)もこの短いプロジェクトの終わりを超えて興味がありません。したがって、私たちは精巧な解決法や、深い魔法を学ぶ必要がある解決法を気にしません。迅速かつ汚れやすい私は、Perlのモジュール機構がこのために過剰なものだと推測していますが、代替案が何であるかは分かりません。

答えて

1

ときuseモジュール、BEGINブロック内のPerlだけrequireのモジュール(およびモジュールはアイテムをエクスポートインポート)。実行時にロードするスクリプトを変更する場合は、requireにご連絡ください。ここで

if ($special_case_1) { 
    require 'special1.pl'; 
    # and go about your business 
} 

userequireを使用する際にgood referenceです。

+0

重要なアイデアは 'require'キーワードを使用することです。 http://www.snowfrog.n​​et/2009/05/09/perl-use-require-importで 'use' 'require' 'do'と 'import'(そのうちの3つは私には新しいもの)のチートシートを見つけました私は自分の考えていたいくつかのあいまいな質問に答えます。 – DarenW

+0

@DarenW Perlに組み込まれているPerlのドキュメントを見てください。 'perldoc'プログラムを使ってドキュメントを読むことができます。それはすべて[ウェブ](http://perldoc.perl.org)でもあります。チュートリアルのセクションを見てください。 –

2

ハッシュまたは配列を使用して、specialcaseのファイルを.plのファイルに、requireまたはdoの値を必要に応じてマップできます。

#!/usr/bin/env perl 

use strict; use warnings; 

my @handlers = qw(one.pl two.pl); 

my ($case) = @ARGV; 
$case = 0 unless defined $case; 

# check that $case is within range 

do $handlers[$case]; 

print special_function(), "\n"; 
+0

これらを1つのファイルにまとめると、私たちにとっては逆効果になります。 「特別な」ファイルには、見ていない独特のハードワイヤードのジャンクがたくさん含まれています。 – DarenW

+0

その場合、実行時に適切なファイルを 'do'してください。ドキュメントへのリンクは私の答えの最初の段落にあります。 –

関連する問題