Perlのコマンドラインオプションの順序は重要ですか?

Perlのコマンドラインオプションの順序は重要ですか?

次のコマンドは期待どおりに機能します。

perl -lne 'print $1 if /install\(TARGETS (.*) RUNTIME DESTINATION bin\)/' CMakeLists.txt

これも動作します:

perl -nle 'print $1 if /install\(TARGETS (.*) RUNTIME DESTINATION bin\)/' CMakeLists.txt

ただし、次のエラーが表示されます。

perl -nel 'print $1 if /install\(TARGETS (.*) RUNTIME DESTINATION bin\)/' CMakeLists.txt

エラーメッセージは次のとおりです。

/install(TARGETS (.*) RUNTIME DESTINATION bin)/: そのファイルやディレクトリがない場合、$1 印刷を開くことができません。

その理由は何ですか?

ベストアンサー1

この-eオプションは、Perlコードで評価される文字列である1つの引数を使用します。オプションの順序は重要ではないため(この場合)をperl -lne '...'使用すると、期待どおりに機能します。perl -nle '...'

しかし、を使用するとき、perl -nel '...'「文字列をlPerlコードとして評価し、それをコードが読み取る'...'ファイルの名前として使用してください」と言うのはあまり意味がありません(したがって、「ファイルが存在しないか」という奇妙なメッセージが表示されます)。ディレクトリ"エラー)。

したがって、いいえ、オプションの順序は重要ではありません(ここでは)。ただし、オプションを移動する場合は、-eオプション引数とPerlコードを移動する必要があります。Perlコードが常にオプションの直後にあるようにする必要があります。

-eたとえば、そのオプションを最初に配置するには、次のようにします。

perl -e '...' -ln

同じコマンドラインでなどのオプションを混在させる場合、オプションの順序はperl非常に重要です。 1つのオプションは次のオプションによって無視され、その逆も同様です。これはマニュアルに記載されています(または参照)。-p-n-p-nperl -npperl -pperl -pnperl -nperlrunman perlrunperldoc perlrun

おすすめ記事