我正在为IRC编写脚本,有时我可能需要使用颜色。通常我会这样做
my $C = chr(3);
$C
是用于颜色的控制代码,但我看到一些其他脚本逃脱了它,如“\ x \ v ...”。我如何获得正确的编码版本?我试过Data::Dumper
,但我找不到它。我希望这个问题有道理。
答案 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:
以下转义序列可用于插值和音译的构造。
\t
标签(HT,TAB)\n
换行(NL)\r
返回(CR)\f
表单Feed(FF)\b
退格(BS)\a
闹钟(铃声)(BEL)\e
转义(ESC)\033
八进制字符(例如:ESC)\x1b
十六进制字符(例如:ESC)\x{263a}
宽十六进制字符(例如:SMILEY)\c[
控制字符(例如:ESC)- 醇>
\N{name}
名为Unicode character
答案 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 sprintf,perldoc -f pack,perldoc -f chr等单独阅读这些功能。
有关十六进制,八进制和二进制数的更多信息,请参阅perldoc perldata下的“标量值构造函数”。
答案 3 :(得分:1)
请参阅perldoc perlre
中的转义序列和字符类和其他特殊转义部分。