[perlのスクリプト] perl_script.pl -b "HELLO" 私はPerlのGetopt :: Stdを2つのパッケージで使用できますか?
use package1;
use package2;
my $argb = GetPackage1Option;
my $argv = GetPackage2Option;
print "$argb\n"; # Print -b argument
print "v is found!\n" if (GetPackage2Option); # Print
[package1.pm]
use Getopt::Std;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(GetPackage1Option);
sub GetPackage1Option {
getopt('b');
our ($opt_b);
my $argb = $opt_b || '';
return $argb;
}
[package2.pm]
use Getopt::Std;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(GetPackage2Option);
sub GetPackage2Option {
my $bool = 0;
my %opt;
getopts('v', \%opt);
return (defined $optHash{v}) ? $optHash{v} : $bool;
}
-v 2つの別々のパッケージから2つの関数を呼び出し、各関数は異なるオプションを使用します。
私はこれを試しましたが、私は-bのオプションしか得ていません。 -vオプションは、-bを使用する関数を削除すると機能します。
ご迷惑をおかけしますが、これは私のオリジナルコードの要約です。
私の質問が混乱している場合は教えてください。ありがとう:)
は概念的には、あなたのコードではありません基礎と脆弱な混乱です:*あなたのプログラムに渡されたコマンドライン引数の単一のセットがあります。 @ ARGVを何度も何度も何度も処理し続けるのは意味がありません。あなたのモジュールは '@ ARGV'処理をしてはいけません。つまり、あなたは '@ ARGV'のコピーを作ることができました...しかし、私はあなたの代わりにあなたのデザインを修正することをお勧めします。 –
私はSinanに同意します。コマンドライン引数の処理をプログラムに入れ、各モジュールが望むものを得るために引数をマップする必要があります。あるいは、各モジュールにコマンドラインのインタフェースを定義できる機能を与えることができます。次に、プログラムがそれを使って引数の完全なリストをコンパイルし、解析することができます。 – simbabque