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

时间:2014-12-18 20:02:19

标签: 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

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

4 个答案:

答案 0 :(得分:6)

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

$row = 1; $col = 1;
printf "\e[%d;%dH", $row, $col;
printf "\e[%d;%dH", $row*2, $col;

答案 1 :(得分: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

在字符串之外进行计算并连接结果。

答案 2 :(得分:5)

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

print "\e[".($row * 2).";${col}H";  

或者,您可以使用printf

printf "\e[%d;%dH", $row*2, $col;

正如Diab Jerius指出的那样,你也可以使用Baby Cart“隐藏的算子”。

答案 3 :(得分:1)

您可以使用Baby Cart运算符

执行此操作
$row = 1; $col = 1;
print "\e[@{[ $row*2 ]};${col}H";