Klaus Mock: open(mail...

Beitrag lesen

Hallo,

Ich hab grad erst angefangen zum pl-Programmiern,

Das ist eine gute Idee;-)

[...]aber ich hab's im SelfHTML leider nicht gefunden...

SelfHTML ist eine gute Quelle des Wissens, aber nicht die einzige;-)

Also: open(mail, "|mail xyz@yahoo.de");

Wie schon gesagt wurde, solltest Du, wenn Du ein externes Programm zum Mailversenden verwendest, unbedingt den vollständigen Pfad, also z.B. '/usr/sbin/sendmail' angeben, um Dich so wenig wie möglich auf Systemeinstellungen (in diesem Falle die Umgebungsvariable PATH) verlassen zu müssen.

Da schmeißt er mir immer die Meldung, dass ich ein package für @yahoo brauche.

Du verwendest anscheinend 'use strict'. Das ist gut so;-)

Bei Perl wird unterschieden ob Du eine Textkonstante mit einfachen Anführungszeichen ' oder doppelten " angegeben wird.
Verwendest Du doppelte, dann ersetzt Perl eventuell darin vorkommende Variablen durch deren Inhalt. In Deinem Fall ("|mail xyz@yahoo.de"), soll also @yahoo ersetzt werden. Da es aber anscheinend diese Variable nicht gibt, und weil Du brav 'use strict' verwendest, kommt die Fehlermeldung.
Hättest Du 'use strict' nicht verwendet, würde kein Fehler auftauchen, aber auch keine Mail, da sie ja an 'xyz.de' (@yahoo existiert nicht, also würde auch @yahoo im Text durch nichts ersetzt werden) gesendet werden würde, was aber nicht richtig ist.
Diese Fehlermeldungen sind einer der Gründe, immer unbedingt 'use strict' zu verwenden.

Noch ein paar Hinweise:
Dateihandles, die Du mit open erzeugst, sollten vereinbarungsgemäß GROSS geschrieben sein, während Variablen klein geschrieben wwerden sollten (siehe perldoc perlstyle).

Sämtliche Operationen in einem Script, welche potenziell scheitern könnten, und somit nachfolgenden Code unsinnig machen, sollten auf erfolgreiche Ausführung getestet werden.
also entweder
if(open(....))
  {
  #hier der Code, der ans MAilprogramm gesendet werden soll
  }
else
  {
  # hier eventuell eine Fehlermeldung
  }

oder (etwas brutaler)

open(...) or die "open hat nicht funktioniert: Fehlermeldung $!";
($! enthält die Systemfehlermeldung, siehe perldoc perlvar)

So, was bleiben Dir also für Möglichkeiten bezüglich @yahoo?

Du kannst beispielsweise einfache Anführungszeichen verwenden
open(MAIL, '|/pfad/zu/mail xyz@yahoo.de') or die "Kann Mailprogarmm nicht ansprechen $!";

oder aber das @ mit einem \ ausmaskieren

open(MAIL, "|/pfad/zu/mail xyz@yahoo.de") or die "Kann Mailprogarmm nicht ansprechen $!";

Hoffe, es hilft Dir weiter.

Grüße
  Klaus