![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: Stella, 30. 12. 2007, 20:07
Hi!
ich habe folgendes Konstrukt (verkürzt)my $test = (
a => {
b => ['c', 'd', 'e', 'f', 'g']
}
);
foreach ($test{a}{b}){
print "$_ \n";
}
als Ausgabe erhalte ich nur "ARRAY(0x8478994)".
Wo ist mein Denkfehler?
perlref habe ich versucht zu verstehen - scheint aber leider nivht geklappt zu haben :-{
Stella
Die folgende Nachricht zum Thema stammt von: Struppi, 30. 12. 2007, 20:30
»» ich habe folgendes Konstrukt (verkürzt)
»»
»» [code lang=perl]my $test = (
»» a => {
»» b => ['c', 'd', 'e', 'f', 'g']
»» }
»» );
Das ist Murks. Wenn du ein Array einem Skalar zuweist, ist das Ergebnis das letzte Element:my $tmp = ('c', 'd', 'e', 'f', 'g');
print $tmp;
Du willst eine Hashreferenz zuweisen.my $test = {
a => {
b => ['c', 'd', 'e', 'f', 'g']
}
};
Und um die Liste auszugeben musst du das Element dereferenzieren:foreach( @{$test->{a}->{b}}{
print "$_\n";
}
Struppi.
Die folgende Nachricht zum Thema stammt von: Stella, 30. 12. 2007, 21:26
hi
»» Du willst eine Hashreferenz zuweisen.
»» my $test = {
»» a => {
»» b => ['c', 'd', 'e', 'f', 'g']
»» }
»» };
»»
»»
»» Und um die Liste auszugeben musst du das Element dereferenzieren:
»» foreach( @{$test->{a}->{b}}{
»» print "$_\n";
»» }
»»
danke!
wieder etwas dazugelernt :-)
Stella
Die folgende Nachricht zum Thema stammt von: Kurt Z, 30. 12. 2007, 21:58
Hi
»» Das ist Murks. Wenn du ein Array einem Skalar zuweist, ist das Ergebnis das letzte Element:
ähm ...ich dachte wenn man ein Array einem Scalar zuweist bekommt man die Länge des Arrays!
und tatsächlich tut sich hier wohl der Unterschied zwischen Liste und Array auf:my @tmp = ('c', 'd', 'e', 'f', 'g');
my $tmp= @tmp;
print $tmp; #Ausgabe 5
Perl ...fremd und geheimnisvoll ...
Guten rutsch
Kurt
Die folgende Nachricht zum Thema stammt von: Kurt Z, 30. 12. 2007, 22:08
http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlfaq4.pod#What_is_the_difference_between_a_list_and_an_array?
weiß jmd wann man den "scalar comma operator" sinnvoll braucht?
Grüße
Kurt
Die folgende Nachricht zum Thema stammt von: Struppi, 30. 12. 2007, 22:31
»» http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlfaq4.pod#What_is_the_difference_between_a_list_and_an_array?
»»
Oh, da bin ich einem kleinen Irrtum aufgelegen. Das kommt davon, wenn man nicht in die FAQs schaut.
»» weiß jmd wann man den "scalar comma operator" sinnvoll braucht?
Auf die Schnelle fällt mir nichts wirklich sinnvolles ein, aber man kann so Platz sparen:$x = tu_was(), 'wert' if ....;
Struppi.
Die folgende Nachricht zum Thema stammt von: Kurt Z, 30. 12. 2007, 22:41
Hi
»» Auf die Schnelle fällt mir nichts wirklich sinnvolles ein, aber man kann so Platz sparen:
»»
»» $x = tu_was(), 'wert' if ....;
du hast recht, nicht wirklich sinnvoll! (grusel :-)
Kurt
Die folgende Nachricht zum Thema stammt von: Kurt Z, 31. 12. 2007, 03:11
Crossposting
http://board.perl-community.de/thread/11086/
Die folgende Nachricht zum Thema stammt von: Stella, 30. 12. 2007, 22:43
Hi
ein kleines Problem hätte ich aber noch
ich möchte überprüfen, ob es ein Indes im Array gibtmy $test = {
a => {
b => ['c', 'd', 'e', 'f', 'g']
}
};
print "Exists\n" if exists $test->{a}->{b}['h'];
print "Defined\n" if defined $test->{a}->{b}['h'];
print "True\n" if $test->{a}->{b}['h'];
als Ergebnis erhalte ich
>Exists
>Defined
>True
in der Doku exists@perldoc habe ich filgendesd gefunden print "Exists\n" if exists $array[$index];
print "Defined\n" if defined $array[$index];
print "True\n" if $array[$index];
Stella
Die folgende Nachricht zum Thema stammt von: Struppi, 31. 12. 2007, 00:16
»» ich möchte überprüfen, ob es ein Indes im Array gibt
»»
»» [code lang=perl]my $test = {
»» a => {
»» b => ['c', 'd', 'e', 'f', 'g']
»» }
»» };
»» print "Exists\n" if exists $test->{a}->{b}['h'];
'h' ist kein Index. Dazu musst du das Array durchlaufen.
Struppi.
Die folgende Nachricht zum Thema stammt von: Stella, 31. 12. 2007, 00:41
Hi
»» Dazu musst du das Array durchlaufen.
das hab ich mir schon fast gedacht :-\
Stella
Die folgende Nachricht zum Thema stammt von: Struppi, 31. 12. 2007, 02:34
»» »» Dazu musst du das Array durchlaufen.
»»
»» das hab ich mir schon fast gedacht :-\
Dafür gibt es aber auch ein Modul (es gibt vielleicht sogar noch mehr, ich hab nur kurz gesucht)
Struppi.
Die folgende Nachricht zum Thema stammt von: Siechfred, 31. 12. 2007, 21:47
»» Das ist Murks. Wenn du ein Array einem Skalar zuweist, ist das Ergebnis das letzte Element:
»» my $tmp = ('c', 'd', 'e', 'f', 'g');
»» print $tmp;
»»
Sorry, aber *das* ist noch größerer Murks - ein Array ist nunmal keine Liste. Entweder Du verwendest eine Arrayreferenz, dann musst Du *erst* dereferenzieren und *dann* den skalaren Kontext anwenden:my $tmp = ['c', 'd', 'e', 'f', 'g'];
print scalar @$tmp;
Oder Du verwendest das korrekte Sigil:my @tmp = ('c', 'd', 'e', 'f', 'g');
print my $anz = @tmp;
Siechfred
--
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
Die folgende Nachricht zum Thema stammt von: Struppi, 01. 01. 2008, 01:33
»» Sorry, aber *das* ist noch größerer Murks -
Ähm, das sollte demonstrieren, was passiert und war keine Lösung
Struppi.
Die folgende Nachricht zum Thema stammt von: Siechfred, 03. 01. 2008, 15:04
»» »» Sorry, aber *das* ist noch größerer Murks -
»» Ähm, das sollte demonstrieren, was passiert und war keine Lösung
Laufen sollte ein Beispielcode dennoch, und der von Dir gepostete Code produziert unter strict-Bedingungen einen Sack voll Warnungen, die einem Anfänger höchstvermutlich nicht viel sagen und statt dessen nur weitere - in diesem Fall vermeidbare - Fragen aufwerfen.
Siechfred
--
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
Die folgende Nachricht zum Thema stammt von: Struppi, 03. 01. 2008, 15:13
»» »» »» Sorry, aber *das* ist noch größerer Murks -
»» »» Ähm, das sollte demonstrieren, was passiert und war keine Lösung
»»
»» Laufen sollte ein Beispielcode dennoch, und der von Dir gepostete Code produziert unter strict-Bedingungen einen Sack voll Warnungen, die einem Anfänger höchstvermutlich nicht viel sagen und statt dessen nur weitere - in diesem Fall vermeidbare - Fragen aufwerfen.
Ist ja ok, das war ein Schnellschuß um zu demonstrieren was wirklich passiert, dass die Zuweisung auch noch Warnungen erzeugt, umso besser, damit sieht der Anfänger, das dieser Ansatz Murks ist.
Letztlich hat der Orginalcode ja schon die Warnungen erzeugt, ich hab diesen Ansatz verwendet ohne zu testen, da ja auch nichts von diesen Warnungen erwähnt wurde, lediglich um zu zeigen dass dieser Murks ist, wie du ja bestätigt hast.
Struppi.
Die folgende Nachricht zum Thema stammt von: Stella, 03. 01. 2008, 18:58
Hi
»» Ist ja ok, das war ein Schnellschuß um zu demonstrieren was wirklich passiert, dass die Zuweisung auch noch Warnungen erzeugt, umso besser, damit sieht der Anfänger, das dieser Ansatz Murks ist.
»» Letztlich hat der Orginalcode ja schon die Warnungen erzeugt, ich hab diesen Ansatz verwendet ohne zu testen, da ja auch nichts von diesen Warnungen erwähnt wurde, lediglich um zu zeigen dass dieser Murks ist, wie du ja bestätigt hast.
mein Code hatte keine Warnungen etc. erzeugt
am Anfang der Datei stand
{code lang=perl]use warnings;
use strict;[/code]
Stella
Die folgende Nachricht zum Thema stammt von: Struppi, 04. 01. 2008, 00:28
»» mein Code hatte keine Warnungen etc. erzeugt
Bei mir schon.
Struppi.
Die folgende Nachricht zum Thema stammt von: Kurt Z, 05. 01. 2008, 22:53
Hi Siechfred,
»» »» »» Sorry, aber *das* ist noch größerer Murks -
»» »» Ähm, das sollte demonstrieren, was passiert und war keine Lösung
»»
»» Laufen sollte ein Beispielcode dennoch, und der von Dir gepostete Code produziert unter strict-Bedingungen einen Sack voll Warnungen, die einem Anfänger höchstvermutlich nicht viel sagen und statt dessen nur weitere - in diesem Fall vermeidbare - Fragen aufwerfen.
ich finde deine harsche Kritik weder fair noch angebracht.
1. Struppi wollte eindeutig zeigen wie's nicht geht,
2. nicht lauffähigen Code hast du auch schon zu genüge gepostet
3. Ich denke 4x "Useless use of a constant ..." dürften in einem Beispielcode über Listen erlaubt sein.
Rechthaberisch ins neue Jahr gestartet???
Frohes neues
Kurt
Die folgende Nachricht zum Thema stammt von: Siechfred, 06. 01. 2008, 23:24
»» 1. Struppi wollte eindeutig zeigen wie's nicht geht,
Sein Posting liest sich anders, finde ich.
»» 2. nicht lauffähigen Code hast du auch schon zu genüge gepostet
Das will ich gar nicht abstreiten, er ist auch entsprechend korrigiert worden.
»» 3. Ich denke 4x "Useless use of a constant ..." dürften in einem Beispielcode über Listen erlaubt sein.
Für Dich und für Struppi vielleicht, aber für einen Anfänger, der das Beispiel nachvollziehen will, m.E. nicht.
»» Rechthaberisch ins neue Jahr gestartet???
No comment.
Siechfred
--
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
Die folgende Nachricht zum Thema stammt von: Kurt Z, 06. 01. 2008, 23:54
Lieber Siechfred,
der "Murks" liegt bei Perl5, wie du aus dem Durcheinander einen idealen anfängergerechten Postingstil ableiten willst, ist mir schleierhaft.
Die Leute die trotzdem versuchen sich der Wahrheit anzunähern (und anderen zu helfen) unnötig anzumurksen ist IMHO kontraproduktiv.
Moderator ist ehrlich der letzte Job auf der Welt den ich haben wollte, wenn man soviele Postings lesen muss und sich auch noch verpflichtet fühlt einen Standard hochzuhalten, unterlaufen einem schonmal Schnellschüsse...
Wie auch immer einen schönen Abend noch.
Kurt
© 1998-2006
Impressum, Software: Classic Forum