我尝试使用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"
答案 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";