我正在尝试使用print
和定位终端光标\e
句法: print "\e[
但是,我想使用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"
printf可用于将计算与打印格式完全分开:
$row = 1; $col = 1; printf "\e[%d;%dH", $row, $col; printf "\e[%d;%dH", $row*2, $col;
试试这个:
$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
在字符串之外进行计算并合并结果.
Perl不会插入表达式,只是插入变量和解引用(它会在解引用中计算表达式).要获得所需的结果,您必须使用连接运算符计算字符串外的表达式.
:
print "\e[".($row * 2).";${col}H";
或者,您可以使用printf
:
printf "\e[%d;%dH", $row*2, $col;
正如Diab Jerius指出的那样,你也可以使用Baby Cart "隐藏的操作员".