Linux 这个'\b';perl工作中的字符?
根据我的研究,perl打印语句中使用的“\b”字符应该像一个“退格”,即将光标向后移动一个字符,然后删除当前字符。出于这个原因,我计划使用此操作在一行上打印操作状态,并随操作进行更新。但是,我注意到,虽然光标确实向后移动,但脚下的字符并没有被删除,因此,在较短的打印语句之后,消息会保留较长的时间。我编译了以下示例代码来解释我的发现:Linux 这个'\b';perl工作中的字符?,linux,perl,escaping,Linux,Perl,Escaping,根据我的研究,perl打印语句中使用的“\b”字符应该像一个“退格”,即将光标向后移动一个字符,然后删除当前字符。出于这个原因,我计划使用此操作在一行上打印操作状态,并随操作进行更新。但是,我注意到,虽然光标确实向后移动,但脚下的字符并没有被删除,因此,在较短的打印语句之后,消息会保留较长的时间。我编译了以下示例代码来解释我的发现: #!/usr/bin/perl use strict; use warnings; my $m; #set to nonzero so that the scr
#!/usr/bin/perl
use strict;
use warnings;
my $m;
#set to nonzero so that the screen will update before \n
local $| = 1;
print "Current number shown: ";
$m = "LONG MESSAGE TEMP";
print $m;
print "\b" x length($m);
foreach(1..22) {
$m = $_;
print $m;
print "\b" x length($m);
#sleep 1; #Uncomment to see updates
}
print "\n";
这就是结果:
显示的当前号码:22NG消息温度
如果这确实是“\b”的正确操作,是否有另一个转义删除字符并将光标移回?我希望避免使用以当前行开头的“\r”。否则,如何错误地使用转义符?只需输出一些额外的空格字符即可覆盖需要覆盖的内容
#!/usr/bin/env perl
use strict;
use warnings;
use Time::HiRes qw(sleep);
sub backspace {
print "\b" x $_[0];
print " " x $_[0];
print "\b" x $_[0];
}
local $| = 1;
my $m = "LONG MESSAGE TEMP";
print "Current number shown: ", $m;
sleep 1;
for (1..22) {
backspace( length($m) );
$m = $_;
print $m;
sleep 0.2;
}
print "\n";
只需输出一些额外的空格字符即可覆盖需要覆盖的内容
#!/usr/bin/env perl
use strict;
use warnings;
use Time::HiRes qw(sleep);
sub backspace {
print "\b" x $_[0];
print " " x $_[0];
print "\b" x $_[0];
}
local $| = 1;
my $m = "LONG MESSAGE TEMP";
print "Current number shown: ", $m;
sleep 1;
for (1..22) {
backspace( length($m) );
$m = $_;
print $m;
sleep 0.2;
}
print "\n";
“\b”
只是编写chr(0x08)
的一种奇特方式。您的终端可能会移动光标而不是显示任何内容,但这完全取决于它
如果您可以依赖它,那么您可以通过使用空格覆盖来实现您想要的
my $last_length = 0;
sub update {
my ($s) = @_;
print("\b" x $last_length);
print(" " x $last_length);
print("\b" x $last_length);
print($s);
$last_length = length($s);
}
或以较少的闪烁:
my $last_length = 0;
sub update {
my ($s) = @_;
my $diff = $last_length - length($s);
print("\b" x $last_length);
print($s);
print(" " x $diff);
print("\b" x $diff);
$last_length = length($s);
}
“\b”
只是编写chr(0x08)
的一种奇特方式。您的终端可能会移动光标而不是显示任何内容,但这完全取决于它
如果您可以依赖它,那么您可以通过使用空格覆盖来实现您想要的
my $last_length = 0;
sub update {
my ($s) = @_;
print("\b" x $last_length);
print(" " x $last_length);
print("\b" x $last_length);
print($s);
$last_length = length($s);
}
或以较少的闪烁:
my $last_length = 0;
sub update {
my ($s) = @_;
my $diff = $last_length - length($s);
print("\b" x $last_length);
print($s);
print(" " x $diff);
print("\b" x $diff);
$last_length = length($s);
}
根据其使用方式,\b在Perl命令中可能具有特殊含义: \b是仅在字符类内的退格字符。在字符类之外,\b是单词字符/非单词字符边界 要用“def”替换文件中出现的每个单词“ABC”,请使用Perl命令:
perl-pi-e的/\bABC\b/def/g'文件
这将使诸如“ZABCD”之类的字符串保持不变。取决于它的使用方式,\b在Perl命令中可能有特殊含义: \b是仅在字符类内的退格字符。在字符类之外,\b是单词字符/非单词字符边界 要用“def”替换文件中出现的每个单词“ABC”,请使用Perl命令:
perl-pi-e的/\bABC\b/def/g'文件
这将使诸如“ZABCD”之类的字符串保持不变。这不是Perl特性。Perl输出八位字节,这取决于让它们做任何想用它做的事情。重要提示:
\b
在Perl正则表达式中有完全不同的含义。这不是Perl特性。Perl输出八位字节,这取决于让它们做任何想用它做的事情。重要提示:\b
在Perl正则表达式中有完全不同的含义。