Christof: @ erstzen in Perl

Hallo,
in einem Perlscript gibt ein Benutzer über ein Formular seine e-mailadresse an in der form xy@zre.de . Das Perlscript kann aber doch nur mit e-mailadressen in der form xy@zre.de arbeiten. mit welchem regulären ausdruck kann ich @ durch @ ersetzen.
Ich hab's mit  $eingabe=~s/@/@/ probiert. ging aber nicht.
Danke
Christof

  1. Hi,

    Ich hab's mit  $eingabe=~s/@/@/ probiert. ging aber nicht.

    der Backslash ist das Escape-Zeichen und muss daher escapet werden, wenn Du ihn als Zeichen anstatt in seiner Funktion meinst.

    Cheatah

    1. Hallo, da war einer schneller ... ;-)

      Hi,

      Ich hab's mit  $eingabe=~s/@/@/ probiert. ging aber nicht.

      der Backslash ist das Escape-Zeichen und muss daher escapet werden, wenn Du ihn als Zeichen anstatt in seiner Funktion meinst.

      Cheatah

      Auf Deutsch: $eingabe=~s/@/\@/

      Ciao Micha

      1. Hallo,

        Auf Deutsch: $eingabe=~s/@/\@/

        da is wie mir scheint ein \ zu viel
        $eingabe =~ s/@/\@/

        1. Hi,

          Auf Deutsch: $eingabe=~s/@/\@/
          da is wie mir scheint ein \ zu viel

          hier, d.h. wenn tatsächlich _nur_ ein "@" da steht, muss dieses Zeichen nicht escapet werden, darf aber. Der Code von Michael ist richtig, Deiner nicht falsch.

          Cheatah

          1. Hi,

            Auf Deutsch: $eingabe=~s/@/\@/
            da is wie mir scheint ein \ zu viel

            hier, d.h. wenn tatsächlich _nur_ ein "@" da steht, muss dieses Zeichen nicht escapet werden, darf aber. Der Code von Michael ist richtig, Deiner nicht falsch.

            Wenn man es allerdings in einer BASH per sed versucht, dann darf man vorne wie hinten kein \ vergessen.

            Daher wuerde ich mich schon daran halten, denn sonst wird es mal falsch. ;-)

            Ciao Micha

            Cheatah

            1. Hallo alle,

              das kapier ich jetzt aber nicht ganz

              @ würde doch @ ausgeben, nicht wahr?
              also würde doch \@ -> @ ausgeben oder ?

              also warum is dann $eingabe =~ s/@/\@/ falsch ?

              1. hallo xnetworkx

                @ würde doch @ ausgeben, nicht wahr?

                richtig.

                also würde doch \@ -> @ ausgeben oder ?

                anscheinend sind \ und @ steuerzeichen.
                darum müssen der \ und das @ maskiert werden.

                \ maskieren: --> \
                @ maskieren: --> @

                gibt zusammen \@
                und nicht ... -------------------------+
                                                       |
                                                       |
                                                       |
                                                      \ /
                                                       o

                also warum is dann $eingabe =~ s/@/\@/ falsch ?

                grüessli

                Siramon, ja der aus der schweiz

              2. Hallo alle,

                das kapier ich jetzt aber nicht ganz

                Kleines Script:

                $test1 = 'michael@staehle'; $test2 = 'michael@staehle'; $test3 = 'michael@staehle';

                $test1 =~ s/@/\@/g;
                $test2 =~ s/@/\@/g;
                $test3 =~ s/@/\@/g;

                print $test1 . "\n"; print $test2 . "\n"; print $test3 . "\n";

                Ergibt drei Mal "michael@staehle".

                Die Begruedung wurde schon geliefert.

                Das Problem ist, dass es man \ bei @ setzten sollte aber nicht muss, aber unter Unix in einer Bash liefert:

                echo michael@staehle | sed -e "s/@/\@/" korrekt
                echo michael@staehle | sed -e "s/@/\@/" korrekt
                echo michael@staehle | sed -e "s/@/\@/" falsch
                echo michael@staehle | sed -e "s/@/\@/" falsch

                Daher sollte man zur Lesbarkeit und Wartbarkeit seines Codes immer den \ mitfuehren.

                Ciao Micha

                @ würde doch @ ausgeben, nicht wahr?
                also würde doch \@ -> @ ausgeben oder ?

                also warum is dann $eingabe =~ s/@/\@/ falsch ?

        2. Moin!

          Auf Deutsch: $eingabe=~s/@/\@/
          da is wie mir scheint ein \ zu viel
          $eingabe =~ s/@/\@/

          Welches Array moechtest Du denn im Ersetzungsteil einbinden? Du musst den Namen dann noch fertig schreiben. Na im Ernst, die drei \ waren schon richtig. Der erste maskiert den zweiten, der dritte maskiert das @.

          So long

        3. hallo x[...]x

          Auf Deutsch: $eingabe=~s/@/\@/

          da is wie mir scheint ein \ zu viel
          $eingabe =~ s/@/\@/

          ich kenn mich mit regexp nicht mehr so aus.
          aber das @ muss maskiert werden oder? --> @
          und das \ will er ja auch maskieren damit ein \ ausgegeben wird --> \

          also gibt das doch 3 [drei] \ --> michael lag richtig.

          grüessli

          Siramon, ja der aus der schweiz

  2. Hallo Christof,

    in einem Perlscript gibt ein Benutzer über ein Formular seine e-mailadresse an in der form xy@zre.de .
    Das Perlscript kann aber doch nur mit e-mailadressen in der form xy@zre.de arbeiten.

    Nein, im allgemeinen kann Perl auch mit Strings umgehen, die ein unmaskiertes @ enthalten.
    Nur wenn Du es als Text innerhalb von Doublequotes einer Variablen hinzufügen willst,
    oder an anderen Stellen verwendest, in denen Variableninterpolation stattfindet,
    afaik nur dann musst Du @ mit \ escapen. Wenn es schon in einer Variablen steht,
    brauchst Du Dich imho nicht darum zu kümmern, es sei denn, Du willst eval()
    auf den String anwenden.
    Verkehrt ist es nicht, aber imho überflüssig, wodurch sich die folgende "Frage(?)" erübrigt. :)

    mit welchem regulären ausdruck kann ich @ durch @ ersetzen.
    Ich hab's mit  $eingabe=~s/@/@/ probiert. ging aber nicht.

    Wie es geht, wenn Du es unbedingt verwenden willst, haben ja schon andere gepostet. :)

    Gruß Alex
    --
    http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart