7

(Read-Eval-Print-Loop プログラムを使用して) 可能なコマンド ライン引数を含む文字列があり、Getopt::Long に渡されるときにコマンド ライン引数と同様に解析されるようにします。

詳しく説明するには:

私は文字列を持っています

$str = '--infile /tmp/infile_location --outfile /tmp/outfile'

新しいオプションを簡単に追加できるように、GetOptions で解析する必要があります。

考えられる回避策の 1 つは、文字列を空白で分割し、@ARGV を新しい配列に置き換えてから、GetOptions を呼び出すことです。何かのようなもの ...

my @arg_arr = split (/\s/, $input_line);

# This is done so that GetOptions reads these new arguments
@ARGV = @arg_arr;
print "ARGV is : @ARGV\n";
GetOptions (
            'infile=s'  => \$infile,
            'outfile=s' => \$outfile
           );

良い/より良い方法はありますか?

4

5 に答える 5

16

Getopt::Longのman ページで任意の文字列からオプションを解析するセクションを確認してください。まさにあなたが探しているものを実行すると思います。

于 2008-09-23T00:15:42.287 に答える
7

空白で分割する代わりに、組み込みの glob 関数を使用します。空白で分割することに加えて、標準のコマンドライン展開を行い、リストを返します。(たとえば、* はファイルのリストなどを表示します。) 一般的な原則として、@ARG をローカル化することもお勧めします。

それ以外は、GetOptions を書き換えずに実行できる唯一の方法です。 (明らかに、ドキュメントをもっと注意深く読む必要があります。)

于 2008-09-23T00:05:50.657 に答える
5

わお!!!

ベンティリーとディノマイトの両方の回答を使用して、次のことができると思います。

  • glob を使用して標準のコマンド ライン展開を実行する
  • グロブの後に配列を GetOpt::Long の GetOptionsFromArray メソッドに渡します (こちらを参照)

コードは次のようになります...

GetOptionsFromArray ([glob ($input_line)]);

そして、それはたった1行です..クールです(エラーチェックなどを行う必要があることはわかっています)..しかし、それはクールです...

于 2008-09-23T00:23:36.807 に答える
0

ユーザー入力以外で Getopt::Long を使用する場合、一部の機能が POSIXLY_CORRECT 環境変数に基づいて異なることに注意してください。これは、Configure への適切な呼び出しでオーバーライドできます。

必須のPOSIXLY_CORRECT 逸話

于 2008-09-23T07:22:56.410 に答える
0

メソッド GetOptionsFromArray と GetOptionsFromString は v2.36 でのみ追加されたようで、Murphy が言うように、私はバージョン 2.35 しか持っていません。

今のところ、地元の@ARGVと一緒に暮らすしかないと思います。

于 2008-09-23T10:57:15.943 に答える