Schrift
[thread]11425[/thread]

wie testen ob leeres Array definiert wurde? (Seite 4)

Leser: 4


<< |< 1 2 3 4 >| >> 37 Einträge, 4 Seiten
Struppi
 2008-03-10 19:53
#106908 #106908
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
KurtZ+2008-03-10 16:11:07--
pq's Einwand bzgl Fehlermeldung stimmt zwar, aber es gibt genug denkbare Beispiele wo ein leeres aber definiertes Array sinnvoll wäre ohne das eine Fehlermeldung geworfen werden müsste.
Ich kann mir keinen Vorstellen und mir ist auch noch keiner begegnet und das obige ist definitiv keins.
KurtZ
 2008-03-10 21:15
#106917 #106917
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
@Struppi: hast du dir überhaupt das Mailbeispiel mit dem BCC angeschaut? Was stört dich daran?
TMTOWTDYOG (there's more than one way to dig your own grave)
styx-cc
 2008-03-11 00:43
#106923 #106923
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Kannst du dein BBC-Beispiel mit etwas Code demonstrieren, ich blick das nicht so wirklich.

edit: ich solte so spaet nicht mehr schrieben
Pörl.
KurtZ
 2008-03-11 02:46
#106926 #106926
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
styx-cc+2008-03-10 23:43:55--
Kannst du dein BBC-Beispiel mit etwas Code demonstrieren, ich blick das nicht so wirklich.


ok ... aber beschwer dich nicht wenns trivial wird. (Ich teste es jetzt auch nicht, das letzte Beispiel funz dafür einwandfrei). Um das ganze besser zu motivieren für ich mal meinen Boss ein :-)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my @defaultBCC=('my.boss@firma.com','his.boss@firma.com');

if ( not defined @BCC) {
   @BCC=@defaultBCC;
}
send_mail( 
   -TEXT =>  $TEXT,
   -TO   =>  join(",",@TO),
   -BBC  =>  join(",",@BCC),
);


sprich: wenn ich kein BCC an meinen Boss will (z.B. bei 1% privatmails), ist @BCC gesetzt.

Würde ich hingegen "nur" if ( @BCC ) abfragen, müsste ich immer jemanden in @BCC benennen, weil ein leeres Array ja FALSCH wäre. [1]


styx-cc+2008-03-10 23:43:55--
edit: ich solte so spaet nicht mehr schrieben


OK erspart mir über Javascript zu philosophieren. ;-)

Ciao
Kurt

PS: wann immer ich BBC geschrieben haben sollte, meinte ich BCC!

[1]DISCLAIMER: Das ist ein konstruiertes Beispiel, ich weiß wie man das mit Refs abbildet und ich weiss das eine Mail mit @BCC=(' ') auch ankommen würde.
TMTOWTDYOG (there's more than one way to dig your own grave)
Struppi
 2008-03-11 10:43
#106932 #106932
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
KurtZ+2008-03-11 01:46:52--
Würde ich hingegen "nur" if ( @BCC ) abfragen, müsste ich immer jemanden in @BCC benennen, weil ein leeres Array ja FALSCH wäre. [1]
Ja, dann fragst du unless(@BCC) .... ab oder versteh ich dich falsch?
pq
 2008-03-11 13:48
#106943 #106943
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Struppi+2008-03-11 09:43:07--
Ja, dann fragst du unless(@BCC) .... ab oder versteh ich dich falsch?

ja. was er will, ist das entsprechende zu referenzen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
if (defined $bcc and @$bcc) {
    # definiert und nicht leer
    $bcc_string = 'Bcc: ' . (join ',', @$bcc) . $/;
}
elsif (defined $bcc) {
    # definiert, aber leer
    $bcc_string = '';
}
else {
    # gar nicht definiert
    $bcc_string = 'Bcc: default@example.org' . $/;
}

nur sieht das beispiel für mich wie gesagt konstruiert aus, und sobald man kein monolithisches
skript mehr hat und subroutinen ins spiel kommen, benutzt man eh referenzen.
ich benutze undef() und defined() nur auf skalaren, von daher ist das ganze fuer mich
auch logisch. dass undef(@array) geht, aber nicht defined(@array), ist eigentlich ein fehler
von undef(), denn bei arrays leert undef() diese nur.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
KurtZ
 2008-03-11 15:04
#106950 #106950
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
pq+2008-03-11 12:48:40--
...denn bei arrays leert undef() diese nur.

naja was verstehst du unter "nur leeren"? Nach undef @arr wird der Speicher freigegeben und defined @arr ist false. siehe Codebeispiel http://board.perl-community.de/thread/11425/startWithMessage=4

Ich geb und gab dir ja recht das man bei größeren Skripten kaum an Refs vorbeikommt, nur die Begründung in perldoc -f defined ist IMHO falsch.

... You should instead use a simple test for
size:

if (@an_array) { print "has array elements\n" }
if (%a_hash) { print "has hash members\n" }


Der Ersatz durch if (@an_array) ist eben nicht gleichwertig!!!

Aber lassen wir die Diskussion, wir drehen uns im Kreise. Es ist IMHO unnötig unorthogonal und man muss wie so oft auf Referenzen ausweichen und Doppelsigils wie @$ hinschreiben.
TMTOWTDYOG (there's more than one way to dig your own grave)
<< |< 1 2 3 4 >| >> 37 Einträge, 4 Seiten



View all threads created 2008-03-06 23:58.