Perl:如何在命令中进行数学运算?

Sma*_*865 3 perl

我正在尝试使用print和定位终端光标\e

句法: print "\e[<row>;<col>H";

但是,我想使用row乘以2 的值.

我可以在perl中执行此操作而无需额外的变量赋值吗?如果没有,我想row在另一条线上乘以2并不是最糟糕的事情......

$row = 1; $col = 1;
print "\e[$row;${col}H";     # Correct syntax, works fine.
print "\e[$row*2;${col}H";   # Does not work
print "\e[($row*2);${col}H"; # Does not work
Run Code Online (Sandbox Code Playgroud)

Bash等价物: echo -ne "\e[$(($row*2));${col}H"

too*_*lic 6

printf可用于将计算与打印格式完全分开:

$row = 1; $col = 1;
printf "\e[%d;%dH", $row, $col;
printf "\e[%d;%dH", $row*2, $col;
Run Code Online (Sandbox Code Playgroud)


Jen*_*ens 5

试试这个:

$row = 1; $col = 1;
print "\e[$row;${col}H";     # Correct syntax, works fine.
print "\e[".($row*2).";${col}H";   # Does not work
print "\e[".($row*2).";${col}H"; # Does not work
Run Code Online (Sandbox Code Playgroud)

在字符串之外进行计算并合并结果.


Pat*_* S. 5

Perl不会插入表达式,只是插入变量和解引用(它会在解引用中计算表达式).要获得所需的结果,您必须使用连接运算符计算字符串外的表达式.:

print "\e[".($row * 2).";${col}H";  
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用printf:

printf "\e[%d;%dH", $row*2, $col;
Run Code Online (Sandbox Code Playgroud)

正如Diab Jerius指出的那样,你也可以使用Baby Cart "隐藏的操作员".

  • Perl可以使用[Baby Cart](https://metacpan.org/pod/distribution/perlsecret/lib/perlsecret.pod#Baby-cart)运算符插入表达式 (2认同)