Perl - Как мне экранировать / кодировать специальные символы - PullRequest
4 голосов
/ 05 марта 2010

Я пишу скрипт для IRC, и иногда мне может понадобиться цвет.Обычно я делаю это так

my $C = chr(3);

$C - это контрольный код, используемый для цвета, но я видел другой скрипт, который экранирует его, например, "\ x \ v ...".Как мне получить правильную закодированную версию этого?Я пытался Data::Dumper, но я не нашел его.Я надеюсь, что этот вопрос имеет смысл.

Ответы [ 4 ]

5 голосов
/ 05 марта 2010

Чтобы указать chr(3) с шестнадцатеричным escape-кодом, используйте:

print "\x03\n";

или в восьмеричном виде:

print "\003\n";

или в качестве контрольного кода:

print "\cC\n";

См. perldoc perlop :

Следующие escape-последовательности доступны в конструкциях, которые интерполируют и транслитерируют.

  1. \t вкладка (HT, TAB)
  2. \n перевод строки (NL)
  3. \r возврат (CR)
  4. \f подача формы (FF)
  5. \b Backspace (BS)
  6. \a Alarm (звонок) (BEL)
  7. \e escape (ESC)
  8. \033 восьмеричный символ (пример: ESC)
  9. \x1b шестнадцатеричный символ (пример: ESC)
  10. \x{263a} широкий шестнадцатеричный символ (пример:SMILEY)
  11. \c[ контрольный символ (пример: ESC)
  12. \N{name} именованный символ Unicode
5 голосов
/ 05 марта 2010

Символы с кодами в диапазоне 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 голосов
/ 05 марта 2010

Вы можете печатать шестнадцатеричные (или даже восьмеричные или двоичные) символы с помощью ряда механизмов (и это ни в коем случае не исчерпывающий список):

# 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 .

1 голос
/ 05 марта 2010

См. Разделы Последовательности Escape и Классы символов и другие специальные Escape in perldoc perlre.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...