Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 这个'\b';perl工作中的字符?_Linux_Perl_Escaping - Fatal编程技术网

Linux 这个'\b';perl工作中的字符?

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

根据我的研究,perl打印语句中使用的“\b”字符应该像一个“退格”,即将光标向后移动一个字符,然后删除当前字符。出于这个原因,我计划使用此操作在一行上打印操作状态,并随操作进行更新。但是,我注意到,虽然光标确实向后移动,但脚下的字符并没有被删除,因此,在较短的打印语句之后,消息会保留较长的时间。我编译了以下示例代码来解释我的发现:

#!/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正则表达式中有完全不同的含义。