2015-07-02 1 views
5

Этот thread относится к строковой литературе Python r, в то время как речь идет о Perl's here. Однако я не уверен, существует ли какая-либо эквивалентная команда в Perl для префикса Python r.Соответствующая строка строки Perl для префикса Python r "text"?

Как вы можете заменить эквивалент Python в строковых литералах Perl?

+1

Ну, если вы хотите _command_, вы можете использовать '' q' и qq' построить строковые литералы в Perl. См. Http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators – simbabque

+4

'' 'особенность как в' q', так и 'qq', однако, нет прямого соответствия Python' r'. – choroba

ответ

6

Оператор с неинтерполированной котировкой q{} доставит вам большую часть пути. Есть только несколько тонких различий.

  1. разделителей

    Есть четыре разделители, используемые с Python сырым строковых литералов:

    • r"..." и r'...'
    • r"""...""" и r'''...'''

    q... оператор в Perl имеет большее разнообразие разделителей

    • Парный разделители q(...), q[...], q<...>, q{...}
    • Обычные разделители могут быть любые другие не алфавитно-цифровой, 7-битный ASCII символ: q"...", q/.../, q#...#, и т.д.
  2. обратный слэш

    символ обратной косой acter \ всегда интерпретируется как буквальный символ обратной косой черты в строковых литеральных строках Python. Это также избежать характера, которые могли бы быть истолкованы как закрывающий разделитель строки

    r'Can\'t believe it\'s not butter' => Can\'t believe it\'s not butter 
    

    обратной косой черты \ в выражении Perl q{...} также обратной косой черты с двумя исключениями:

    • обратной косой предшествует символ разделитель

      q<18 \> 17 \< 19>  => 18 > 17 < 19 
      q#We're \#1#   => We're #1 
      
    • Обратная косая черта предшествует другому символу обратной косой черты. В этом случае последовательность двух символов обратной косой черты интерпретируется как одна обратная косая черта.

      q[single \ backslash]   => single \ backslash 
      q[also a single \\ backslash] => single \ backslash 
      q[double \\\ backslash]   => double \\ backslash 
      q[double \\\\ backslash]  => double \\ backslash 
      

Существует один способ создать действительно "сырой" строки в Perl: одинарной кавычки здесь-док.

my $string = <<'EOS'; 
'"\\foo 
EOS 

Это создает строку '"\\fooNEWLINE.

(Так же можно создать единый сырец строкового литерала в Python, который содержит как ''' и """?)

+2

Добавлен самый верный исходный Perl. – ikegami

+2

heredoc строки всегда заканчиваются в новой строке – mob

+0

Yup. Потому что там есть новая линия. – ikegami

Смежные вопросы