ablog

不器用で落着きのない技術者のメモ

Perl ワンライナーにシェル変数を渡す

Perl ワンライナーでシェル変数を渡すには -s オプションを使えばよい。

書式

perl -se '...' -- -Perlで使う変数名=シェル変数名

実行例

$ FOO=bar; perl -sle 'print $var' -- -var=$FOO
bar

参考

  • sオプションを使います
echo -e "hogehoge\nfugafuga" > myfile.txt
var="hogehoge\n";cat myfile.txt | perl -pse 's/$shell_var//' -- -shell_var=$var
[小ネタ]perlワンライナーにシェル変数を渡す - Qiita

-s
コマンドライン上のプログラム名の後から、ファイル名引数 (または引数 --) の前までのスイッチのための、原始的な解析を 行なえるようにします。 ここで見つかったスイッチは、@ARGV から取り除かれ、対応する Perl プログラムの 変数に設定されます。 以下のプログラムは、-xyz というスイッチを付けて実行された時にだけ、 "1" と表示し、-xyz=abc と起動された時に "abc" と表示します。

#!/usr/bin/perl -s
if ($xyz) { print "$xyz\n" }
--help のようなスイッチは変数 ${-help} を作成するので、 use strict "refs" を満たさないことに注意してください。 また、警告を有効にしたスクリプトでこのオプションを使うと、大量の "used only once" という偽警告がでることになります。

perlrun - Perl インタプリタの起動方法 - perldoc.jp