Perl - 如何转义/编码特殊字符

时间:2010-03-05 17:20:12

标签: perl

我正在为IRC编写脚本,有时我可能需要使用颜色。通常我会这样做

my $C = chr(3);

$C是用于颜色的控制代码,但我看到一些其他脚本逃脱了它,如“\ x \ v ...”。我如何获得正确的编码版本?我试过Data::Dumper,但我找不到它。我希望这个问题有道理。

4 个答案:

答案 0 :(得分:5)

代码范围为0 .. 255的字符可以用多种方式表示。这些示例都打印了字符A

print chr(65);
print "\101";     # octal notation
print "\x41";     # hexidecimal notation (and hexadecimal notation)
printf "%c",65;


或针对您的特定问题:

print chr(3);
print "\003";
print "\3";
print "\x03";     # hexidecimal notation (and hexadecimal notation)
printf "%c",3;
print "\cc";      # from Sinan's answer
print "\cC";

答案 1 :(得分:5)

使用十六进制转义码指定chr(3)的方法是使用:

print "\x03\n";

或者,八进制:

print "\003\n";

或作为控制代码:

print "\cC\n";

请参阅perldoc perlop

  

以下转义序列可用于插值和音译的构造。

     
      
  1. \t标签(HT,TAB)
  2.   
  3. \n换行(NL)
  4.   
  5. \r返回(CR)
  6.   
  7. \f表单Feed(FF)
  8.   
  9. \b退格(BS)
  10.   
  11. \a闹钟(铃声)(BEL)
  12.   
  13. \e转义(ESC)
  14.   
  15. \033八进制字符(例如:ESC)
  16.   
  17. \x1b十六进制字符(例如:ESC)
  18.   
  19. \x{263a}宽十六进制字符(例如:SMILEY)
  20.   
  21. \c[控制字符(例如:ESC)
  22.   
  23. \N{name}名为Unicode character
  24.   

答案 2 :(得分:3)

您可以通过多种机制打印十六进制编码(甚至是八进制或二进制编码)字符(这不是一个全面的列表):

# generate strings from hex:
my $space_char = sprintf("%x", 0x20);
my $space_char2 = "\x20";
my $space_char3 = 0x20;
my $space_char4 = pack("L", 0x20);
my $space_char5 = chr(0x20);

您可以在perldoc perlfunc或通过perldoc -f sprintfperldoc -f packperldoc -f chr等单独阅读这些功能。

有关十六进制,八进制和二进制数的更多信息,请参阅perldoc perldata下的“标量值构造函数”。

答案 3 :(得分:1)

请参阅perldoc perlre中的转义序列字符类和其他特殊转义部分。