Thread datei in array einlesen zwecks mailversand (6 answers)
Opened by ertox at 2010-08-06 20:24

renee
 2010-08-07 06:45
#140443 #140443
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kurze Antwort:
Du musst es so machen:
Code (perl): (dl )
1
2
3
4
$sender->MailMsg({to => 'asd',
subject => 'Testmail',
msg => join '::', @text,
}) or print "FUBAR";


Lange Antwort:
Du versuchst hier, ein Array als Wert in einem Hash zu benutzen. Das geht nicht. In Hashes dürfen nur Skalare die Werte sein. Wobei ein Skalar (fast) alles sein kann: String, Zahl, Arrayreferenz, Hashreferenz, ...

Mit diesen Referenzen baut man komplexe Datenstrukturen auf. Siehe dieser Wiki:Artikel.

In Deinem Code machst Du:
Code: (dl )
1
2
3
{to => 'asd',
subject => 'Testmail',
msg => @text}


Damit Du siehst, was dann passiert, solltest Du Dir mal das hier anschauen:
Code (perl): (dl )
1
2
3
4
5
6
7
use Data::Dumper;

my @text = qw(das ist ein Test);
my $hashref = {to => 'asd',
subject => 'Testmail',
msg => @text};
print Dumper $hashref;


Dann siehst Du, dass so etwas rauskommt:
Code: (dl )
1
2
3
4
5
6
7
$VAR1 = {
'msg' => 'das',
'to' => 'asd',
'ist' => 'ein',
'subject' => 'Testmail',
'Test' => undef
};
Du siehst, dass die Elemente des Arrays teils als Schlüssel, teils als Wert in dem Hash auftauchen. Warum?

Ein Hash ist im Prinzip eine Liste mit einer geraden Anzahl von Elementen. Bei der Deklaration sieht man meistens das "=>" für die Zuweisung von Wert zu Schlüssel. Das "=>" ist das "fat comma", das dafür sorgt, dass der Teil links davon stringifiziert wird. Aber es ist ein Komma. Du kannst einen Hash auch so deklarieren:

Code: (dl )
1
2
3
my %hash = ('subject','Testmail', 'to', 'asd' );
# oder
my %hash = @array;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread datei in array einlesen zwecks mailversand