Cruz: @ im String?

Ja hallo,

Ich habe eine Library, wo ich eine Funktion habe, mit der Emails versende (benutzt Mime:Lite).

Die Parameter werden als ein Hash übergeben, hier ist ein Code Schnipsel:

Library::email(
{
   from => "Mich <".Config->get("application.from").">",
   to => $Profile->{email},
   subject => $Object->{title},
   text => $Object->{text},
});

und jetzt fliegt mir das Ding um die Ohren, weil $Profile->{email} ein @ Zeichen enthält. Nehme ich jedenfalls an, da ich diese Meldung bekomme:

Argument "cruz@internetfreaks.de" isn't numeric in hash element at controller/NewsController.pm line 36.
Bad index while coercing array into hash at controller/NewsController.pm line 36.

Ich setze diese Methode schon lange ein und nie ist es mir vorher um die Ohren gefolgen. Ich bin also etwas verwirrt. Ich weiss, dass ich z.B. kein @ in double quotes haben darf ohne es zu escapen. Wegen "argument isn't numeric" habe ich auch mal probiert, ob es mit

to => "" . $Profile->{email} . "",

besser funktioniert, aber nichts da.
Kann mir jemand sagen was da wirklich das Problem sein könnte und wie ich das zukünftig besser machen kann?

Vielen Dank
Cruz

  1. hi!

    und jetzt fliegt mir das Ding um die Ohren, weil $Profile->{email} ein @ Zeichen
    enthält. Nehme ich jedenfalls an, da ich diese Meldung bekomme:
    Argument "cruz@internetfreaks.de" isn't numeric in hash element at controller/
    NewsController.pm line 36.
    Bad index while coercing array into hash at controller/NewsController.pm line 36.

    Also die Fehlermeldung liegt sehr wahrscheinlich nicht daran, dass ein @ in deiner
    Variablen vorkommt. Ich vermute eher, dass deine Datenstruktur, die hinter $Profile
    steckt, irgendwie merkwuerdig aufgebaut ist. Leider ist das aus deinem Codeschnipsel
    nicht ersichtlich.

    Vermutung: $Profile ist eine Array-Referenz und keine Hash-Referenz.

    Sagt dir der Begriff Pseudo-Hash etwas? Das ist ein merkwuerdiges Perl-Konstrukt,
    von dem ich nie wissen wollte, dass es existiert. Moeglich, dass dein Code sowas
    verwendet. Zumindest laesst mich das die Fehlermeldung vermuten (perldoc perldiag):

    Bad index while coercing array into hash
               (F) The index looked up in the hash found as the 0'th element of a
               pseudo-hash is not legal.  Index values must be at 1 or greater.

    Mehr ueber Pseudo-Hashs findest du in perldoc perlref. Mein Tipp, falls du wirklich
    einen Pseudo-Hash verwendest: Lass das sein! ;)

    bye, Frank!

    --
    Never argue with an idiot. He will lower you to his level and then
    beat you with experience.
    1. Hallo Frank,

      ja ich habe vor Jahren, als ich mich mit OO-Perl auseinandergesetzt habe, über Pseudo Hashes gelesen und bin ebenso davor weggelaufen. :)

      Mein $Profile ist ein ordentlich geblesstes, auf ein Hash basierendes Objekt. $Profile->{email} habe ich natürlich gecheckt und da steht einfach nur die Emailadresse drin.

      Aber gut, trotzdem vielen Dank für die Antwort, ich versuche heute abend stärker in richtung Objektstruktur zu debuggen, vielleicht finde ich irgendwo eine ungereimtheit.

      Ciao,
      Cruz