我可以像
一样做数学perl -e 'print 5253413/39151' -l
但我不太了解如何利用Perl使用我自己的预定义bash变量进行数学运算的能力。我试过了
var1=$(some wc command that yields a number); var1=$(some wc that yields another number)
perl -e 'print var1/var2' -l
但它不起作用
答案 0 :(得分:12)
有两种主要方法可以做到这一点。
在Perl代码中,您可以使用%ENV
内置哈希来访问从shell 导出的环境变量
$ export var1=5253413
$ export var2=39151
$ perl -E 'say $ENV{var1}/$ENV{var2}'
134.183366963807
您可以使用shell插值工具将shell变量的值插入到命令
中这最好以perl one-liner的参数完成,而不是直接将值引入代码
$ var1=5253413
$ var2=39151
$ perl -E '($v1, $v2) = @ARGV; say $v1/$v2' $var1 $var2
134.183366963807
答案 1 :(得分:6)
两种不常见的方法是使用长期的perl功能。
第一个是core module 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
请注意,变量需要存在于perl进程继承的环境中,例如,如上所述使用export VAR
,或者显式地用于单个命令(如FOO=hello perl -MEnv -E 'say $FOO'
所示)。
第二种更为模糊的方法是使用perl的-s
switch从命令行设置任意变量:
sh$ VAR1=1000
sh$ VAR2=33
sh$ perl -s -E 'say $dividend/$divisor' -- -dividend=$VAR1 -divisor=$VAR2
333.333333333333
awk与-v
switch做了类似的事情。