我可以做数学
perl -e 'print 5253413/39151' -l
Run Code Online (Sandbox Code Playgroud)
但是我不太了解如何利用Perl使用我自己的预定义bash变量进行数学运算的能力.我试过了
var1=$(some wc command that yields a number); var1=$(some wc that yields another number)
perl -e 'print var1/var2' -l
Run Code Online (Sandbox Code Playgroud)
但它不起作用
Bor*_*din 12
有两种主要方法可以做到这一点.
在Perl代码中,您可以使用%ENV内置哈希来访问从shell 导出的环境变量
$ export var1=5253413
$ export var2=39151
$ perl -E 'say $ENV{var1}/$ENV{var2}'
134.183366963807
Run Code Online (Sandbox Code Playgroud)您可以使用shell插值工具将shell变量的值插入到命令中
这最好作为perl one-liner的参数来完成,而不是直接将值引入代码中
$ var1=5253413
$ var2=39151
$ perl -E '($v1, $v2) = @ARGV; say $v1/$v2' $var1 $var2
134.183366963807
Run Code Online (Sandbox Code Playgroud)两种不太常见的方法可以使用长期的perl功能.
第一个是核心模块Env,它将进程环境变量与perl变量联系起来:
sh$ export VAR1=1000
sh$ export VAR2=33
sh$ perl -MEnv -E 'say $VAR1/$VAR2' # imports all environ vars
333.333333333333
sh$ perl -MEnv=VAR1,VAR2 -E 'say $VAR1/$VAR2' # imports only VAR1, VAR2
333.333333333333
Run Code Online (Sandbox Code Playgroud)
请注意,变量需要存在于perl进程继承的环境中,例如,export VAR如上所述,或显式地用于单个命令(如FOO=hello perl -MEnv -E 'say $FOO').
第二种也是比较模糊的方法是使用perl的-s开关从命令行设置任意变量:
sh$ VAR1=1000
sh$ VAR2=33
sh$ perl -s -E 'say $dividend/$divisor' -- -dividend=$VAR1 -divisor=$VAR2
333.333333333333
Run Code Online (Sandbox Code Playgroud)
awk用它的-v开关做了类似的事情.