Schrift
[thread]12372[/thread]

Ist Hash in Array vorhanden? (Seite 2)



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
pq
 2008-08-18 14:54
#113655 #113655
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Gast+2008-08-18 12:49:16--
Das "exists" ist nötig sonst wird automatisch der Hashkey "234" angelegt und der erste Teil der Abfrage wäre damit immer wahr!

das stimmt nicht.
$foo->{bar} eq 'baz'
legt keinen key an.
$foo->{bar}->{boo} eq 'baz'
legt den key bar an.
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
renee
 2008-08-18 14:56
#113656 #113656
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Gast: Das ist nicht richtig:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
perl -MData::Dumper 
my @test = ({1 => 2});
my @var = grep{ $_->{123} and $_->{123} == 2 }@test;
print join( "::", @var),"\n", Dumper \@test;'

$VAR1 = [
{
'1' => 2
}
];
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/
Escape
 2008-08-18 17:26
#113667 #113667
User since
2008-07-24
312 Artikel
BenutzerIn
[default_avatar]
Nach meinem Verständnis wird auf der linken Seite der Bedingung geprüft, ob $->{234} einen definierten Wert enthält.
Auf der rechten Seite der Bedingung wird geprüft ob der definierte Wert dem Muster entspricht.

exists() würde prüfen ob der Key $->{234} im Hash vorhanden ist und, falls nicht, beim Durchlauf der rechten Seite der Bedingung, eine Fehlermeldung erzeugen (Use of uninitialized value ... ).

Sehe ich das falsch?

P.S. '&&' statt 'and' könnte besser sein.
Die Deutsche Rechtschreibung ist Freeware; Du darfst sie kostenlos nutzen – aber sie ist nicht Open Source, d.h. Du darfst sie nicht verändern und/oder in veränderter Form veröffentlichen.
MatthiasW
 2008-08-18 20:27
#113676 #113676
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Escape+2008-08-18 15:26:53--
Nach meinem Verständnis wird auf der linken Seite der Bedingung geprüft, ob $->{234} einen definierten Wert enthält.
Auf der rechten Seite der Bedingung wird geprüft ob der definierte Wert dem Muster entspricht.

Das stimmt soweit, allerdings wird die rechte Seite nur geprüft, falls die linke Seite true war. Stichwort: lazy evaluation

Escape+2008-08-18 15:26:53--
exists() würde prüfen ob der Key $->{234} im Hash vorhanden ist und, falls nicht, beim Durchlauf der rechten Seite der Bedingung, eine Fehlermeldung erzeugen (Use of uninitialized value ... ).

Sehe ich das falsch?

Ja, das siehst du falsch. exists() prüft ob der key vorhanden ist, ist er nicht vorhanden, wird die rechte Seite nicht durchlaufen.

Escape+2008-08-18 15:26:53--
P.S. '&&' statt 'and' könnte besser sein.

http://p3rl.org/perlop - 'C-style logical AND' und 'logical AND'
Der einzige Unterschied zwischen den beiden Operatoren ist, dass 'and' nicht so eine hohe Priorität hat wie '&&'.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
Escape
 2008-08-19 20:14
#113715 #113715
User since
2008-07-24
312 Artikel
BenutzerIn
[default_avatar]
Völlig klar ...
da hab ich mich aber schön blamiert.
Die Deutsche Rechtschreibung ist Freeware; Du darfst sie kostenlos nutzen – aber sie ist nicht Open Source, d.h. Du darfst sie nicht verändern und/oder in veränderter Form veröffentlichen.
RalphFFM
 2008-08-20 01:53
#113720 #113720
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Es gibt m.E. einige Dinge in Perl, die man sich nicht allein aus der Logik heraus erschließen/ableiten kann.

Btw, eine allgemeinere Anmerkung:
Ich bin immer wieder überrascht und freue mich, daß im Verlauf der Threads letztere thematisch doch häufig gehörig in die Tiefe gehen, und mir dabei manches klarer wird. Und ich finds überhaupt prima, daß Perl soviel Kommunikation auslösen kann. Perl hat denke ich einiges mit Kultur zu tun.
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2008-08-18 13:49.