Perlスクリプトにコマンドライン引数として名前付き変数を渡します。

Perlスクリプトにコマンドライン引数として名前付き変数を渡します。

awk-vawk -v var="value" ...次のフラグを使用して、名前付き変数をスクリプトに渡す便利な方法を提供します。 Perlを使って同じことをすることはできますか?それとも、適切な引用などでシェルを介して補間する必要がありますかargv?このオプションは望ましい効果を提供できますが、ブール値にのみ適用されます。getopts%ENV-s

答え1

さらなる調査を通じて、単にスイッチを切り替えるのではなく、任意のデータを渡すオプションをmeuh使用していただきありがとうございます。単一行でオプションを使用する正しい構文は次のとおりです。-s-s

$ perl -se 'print "xyz=$xyz\n"' -- -xyz="abc"
xyz=abc

答え2

以下は、コマンドラインからawkに似た変数割り当てを読み、シェルスクリプトからインラインPerlコードを受け入れる方法を示しています。

# cat test.sh
perl - FS=':' GRP='50' <<'EOF'
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
print "$FS\n";
print "$GRP\n";
EOF

これが証拠です:

# sh test.sh
:
50

インライン、複数行のPerlコードを受け入れるOPの答えの代替形式は次のとおりです。

# cat test.sh
perl -s -- - -xyz="abc" <<'EOF'
print "xyz=$xyz\n";
EOF

そして証明してください:

# sh xyz.sh
xyz=abc

この形式はシェルスクリプトで書かれた形式と非常によく似ており、コードを別のファイルに入れることなく、重要な翻訳されたコードを生成されたawkコードに簡単に置き換えることができます。awka2pperl

関連情報