如何在 Perl 中转义/编码特殊字符?

问题描述 投票:0回答:4

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

my $C = chr(3);

$C
是用于颜色的控制代码,但我见过一些其他脚本可以转义它,例如“\x ...”。我如何获得正确的编码版本?我尝试过
Data::Dumper
,但没找到。

perl
4个回答
5
投票

用十六进制转义码指定

chr(3)
的方法是使用:

print "\x03\n";

或者,八进制:

print "\003\n";

或者,作为控制代码:

print "\cC\n";

参见 perldoc perlop

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

  1. \t
    选项卡(HT、TAB)
  2. \n
    换行符 (NL)
  3. \r
    返回(CR)
  4. \f
    换页 (FF)
  5. \b
    退格键(BS)
  6. \a
    警报(铃)(BEL)
  7. \e
    逃脱(ESC)
  8. \033
    八进制字符(示例:ESC)
  9. \x1b
    十六进制字符(示例:ESC)
  10. \x{263a}
    宽十六进制字符(示例:SMILEY)
  11. \c[
    控制字符(例如:ESC)
  12. \N{name}
    命名的Unicode字符

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";

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 下的“标量值构造函数”。


1
投票

请参阅perldoc perlre中的转义序列

字符类和其他特殊转义部分。

© www.soinside.com 2019 - 2024. All rights reserved.