Thorsten Steffen: Sonderzeichen und Steuerzeichen in Variablen

Hi,
kann mir jemand sagen, welche Sonder- und Steuerzeichen in perl-Variablen mit vorangestelltem \ angegeben werden müssen (wie z.B. @), damit sie korrekt ausgegeben werden.
Außerdem möchte ich in einer mail mit
print MAIL ".CF 10\n";
einen Punkt am Anfang einer Zeile schreiben. Leider kommt die Mail immer ohne Punkt an.
Was habe ich falsch gemacht ?

Gruß
Thorsten

  1. Hi,
    kann mir jemand sagen, welche Sonder- und Steuerzeichen in perl-Variablen mit vorangestelltem \ angegeben werden müssen (wie z.B. @), damit sie korrekt ausgegeben werden.
    Außerdem möchte ich in einer mail mit
    print MAIL ".CF 10\n";
    einen Punkt am Anfang einer Zeile schreiben. Leider kommt die Mail immer ohne Punkt an.
    Was habe ich falsch gemacht ?

    Gruß
    Thorsten

    Hi Thorsten,

    sogesehen mußt du alle Sonderzeichen die mit der Struktur von Perl zutun haben maskieren.  Also "@!$&()=+- u.s.w.
    Im Zweifelsfall immer in einem mini-script einfach probieren....

    Dein "print Mail" Beispiel habe ich getestet und bei mir funktioniert es. Ich weiß auch nicht, siehe dein Script besser nochmal durch.

    gruß Daniel

    1. Hi Thorsten,

      sogesehen mußt du alle Sonderzeichen die mit der Struktur von Perl zutun haben maskieren.  Also "@!$&()=+- u.s.w.
      Im Zweifelsfall immer in einem mini-script einfach probieren....

      Dein "print Mail" Beispiel habe ich getestet und bei mir funktioniert es. Ich weiß auch nicht, siehe dein Script besser nochmal durch.

      gruß Daniel

      Muß ein Punkt auch maskiert werden ?
      Mein
      open(MAIL,"$Mailprogramm -t") die "Can't send mail, error opening sendmail";
      print MAIL "To: $Empfaenger\n";
      print MAIL "From: $SenderMail $SenderName\n";
      print MAIL "Subject: $MailSubject\n\n";
      print MAIL "$ANFANGSPARAMETER";
      print MAIL ".CF 10\n";
                    ...
      funktioniert nicht, keine Ahnung woran es liegt.
      Folgendes funktioniert aber, es wird jeweils ein (!) Punkt ausgegeben.:
      print MAIL "..CF 10\n";
      print MAIL "..CF 10\n";

      Gruß
      Thorsten

      1. hallo Thorsten,
        grunsätzlich nein. print ".CF" gibt auch wirklich ".CF" aus.

        Am besten Du liest Dir 'perlop.html#Quote_and_Quote_like_Operators' der Core-Doku durch. Dort steht alles wissenswerte. eine genaue Erklärung wie das genau funktioniert, würde den Rahmen hier sprengen.

        Ich denke, da ist Perl gar nicht der Schuldige. Gib doch das ganze einfach einmal in eine Datei aus und sieh Dir  den Output an.
        Dann siehst Du schon was passiert.

        Schönen Abend noch
        Klaus

      2. Hallo!

        Folgendes funktioniert aber, es wird jeweils ein (!) Punkt ausgegeben.:
        print MAIL "..CF 10\n";
        print MAIL "..CF 10\n";

        Beim Versenden von Mails ueber SMTP wird das Ende der Mail mit einer Zeile gekennzeichnet, die lediglich aus einem Punkt besteht. Da eine solche Zeile auch ganz normal im Text der Mail vorkommen kann, wird vor der Uebertragung jeder Punkt am Zeilenanfang im normalen Text verdoppelt, und dann auf der anderen Seite wieder zwei Punkte am Zeilenanfang zu einem gemacht. (Siehe RFC 821 section 4.5.2) Offenbar wird von sendmail (?) dasselbe Protokoll verwendet, wenn der Mailtext eingegeben wird. Du wirst also diese Prozedur auf Deine zu versendenden Daten anwenden muessen.

        Was die Maskierung angeht, so kannst Du generell jedes nicht-alphanumerische Zeichen (also alles ausser [a-zA-Z0-9]) durch \ maskieren. Die Zeichen, die ohne \ eine Sonderbedeutung haetten, werden dadurch neutralisiert, bei den anderen stoert es nicht. Aber ein \ vor einem alphanumerischen Zeichen wird dessen Sonderbedeutung erst *einschalten*, z.B. steht \t fuer Tabulator (ASCII 9) und \n fuer Linefeed (systemabhaengig; meist ASCII 10).

        So long

  2. Hallo Thorsten,

    Hi,
    kann mir jemand sagen, welche Sonder- und Steuerzeichen in perl-Variablen mit vorangestelltem \ angegeben werden müssen (wie z.B. @), damit sie korrekt ausgegeben werden.

    [...]

    Schau Dir mal 'perldoc -f quotemeta' an, das wird dir helfen.

    Gruß
    Thorsten

    Gruss
       Kai