2015-07-02 8 views
5

Diese thread ist über Python String-Literal r, während dies über Perl ist ein here. Ich bin jedoch nicht sicher, ob es in Perl einen entsprechenden Befehl für Pythons Präfix r gibt.Perls korrespondierendes String-Literal für Pythons Präfix r "text"?

Wie können Sie Python-Präfix r in den String-Literalen von Perl ersetzen?

+1

Nun, wenn Sie einen _command_ möchten, können Sie 'q' und' qq' verwenden, um Stringliterale zu konstruieren in Perl. Siehe http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators – simbabque

+4

'\' ist jedoch sowohl in 'q' als auch in' qq' etwas Besonderes, daher gibt es keine direkte Übereinstimmung mit Pythons r'. – choroba

Antwort

6

Der nicht interpolierte Angebotsoperator q{} wird Ihnen den größten Teil des Weges dorthin bringen. Es gibt nur ein paar subtile Unterschiede.

  1. delimiters

    Es gibt vier Trennzeichen mit Python rohen Stringliterale verwendet:

    • r"..." und r'...'
    • r"""...""" und r'''...'''

    Die q... Operator in Perl hat eine größere Vielfalt von Trennzeichen

    • Gekoppelte delimiters q(...), q[...], q<...>, q{...}
    • Regular delimiters andere nicht-alphanumerisch sein kann, 7-Bit-ASCII-Zeichen: q"...", q/.../, q#...#,
    • usw.
  2. der Backslash

    der Backslash char acter \ wird immer als Literal-Backslash-Zeichen in Python-Roh-Literal-Strings interpretiert. Es wird auch ein Zeichen entgehen, die sonst als Endbegrenzer des Strings

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

    Der umgekehrte Schrägstrich \ in einem Perl q{...} Ausdruck interpretiert werden würde, ist auch ein Backslash mit zwei Ausnahmen:

    • Der Backslash geht einem Begrenzungszeichen

      q<18 \> 17 \< 19>  => 18 > 17 < 19 
      q#We're \#1#   => We're #1 
      
    • Der umgekehrte Schrägstrich steht vor einem anderen umgekehrten Schrägstrich. In diesem Fall wird die Folge von zwei umgekehrten Schrägstrichen als ein einzelner umgekehrter Schrägstrich interpretiert.

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

Es gibt einen Weg, um ein wirklich "raw" String in Perl zu erstellen: Ein einzelnes zitierte hier-doc.

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

Dadurch wird die Zeichenfolge '"\\fooNEWLINE erstellt.

(So ist es möglich, eine einzelne rohe Stringliteral in Python zu erstellen, die sowohl ''' und """ enthält?)

+2

Hinzugefügt das wahrste rohe Perl hat. – ikegami

+2

Heredoc-Strings enden immer in einem Zeilenumbruch – mob

+0

Yup. Weil es dort eine Newline gibt. – ikegami