私の質問のタイトルは基本的にそれをカバーすると思います。もちろん問題は-n
オプションコードの周りに暗黙while (<>) { ... }
ループを作成し、ということである-nまたは-pオプションを使用すると、@ ARGVにコマンドライン引数を渡すことはできますか?
perl -ne 'chomp; print if $_ eq $ARGV[0];' bb <<<$'aa\nbb\ncc';
## Can't open bb: No such file or directory.
:ここではその正確に等しいパラメータ化された文字列、基本的にPerl的fgrep -x
入力ラインをフィルタリングしようと不自然な例ですダイヤモンド演算子は、ファイル名のすべてのコマンドライン引数を邪魔します。だから、技術的に引数はになりましたが、@ARGV
になりました。引数がでもがダイヤモンド演算子によって取得されたため、プログラム全体が失敗します。最終的には、-n
を使用している場合、Perlプログラムにコマンドライン引数を渡すことは不可能です。
暗黙的にwhile (<STDIN>) { ... }
ループを作成するオプションが本当に必要なのではないかと思うので、コマンドライン引数はファイル名には使用されませんが、そのようなものは存在しません。
1:BEGIN { ... }
ブロックをコピーするとクリア@ARGV
私は、次の3つの回避策を考えることができます。
perl -ne 'BEGIN { our @x = shift(@ARGV); } chomp; print if $_ eq $x[0];' bb <<<$'aa\nbb\ncc';
## bb
2:手動コードワンライナーでwhileループ。
perl -e 'while (<STDIN>) { chomp; print if $_ eq $ARGV[0]; }' bb <<<$'aa\nbb\ncc';
## bb
3:、このような環境変数として引数を渡すために別の方法を探します。
PAT=bb perl -ne 'chomp; print if $_ eq $ENV{PAT};' <<<$'aa\nbb\ncc';
## bb
BEGIN { ... }
ブロック溶液は、ワンライナーで耳障りコンテキストスイッチのビットを構成するので、望ましくない幾分冗長であり、特別な変数@ARGV
いじり必要とします。
-n
オプションを完全に捨てて、コマンドライン引数で-n
オプションを使用できるようにするために、手動のwhileループソリューションを非解決策と考えています。
同じ環境変数の解決のために言うことができます。要点は、-n
オプションでコマンドライン引数を使用できるようにすることです。
良い方法はありますか?
も[perlで-eおよび-sスイッチを使用する](HTTPを参照してください。com/questions/21496063/using-e-and-s-switch-in-perl) –