Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von Dezember

SELFHTML Forumsarchiv
Array durchlaufen

Informationsseite
  1. Seite (PERL) Array durchlaufen von Stella, 30. 12. 2007, 20:07
nach unten

Array durchlaufen

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

nach obennach unten

Array durchlaufen

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.

nach obennach unten

Array durchlaufen

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

nach obennach unten

Liste nicht Array

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

nach obennach unten

Liste nicht Array

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

nach obennach unten

Liste nicht Array

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.

nach obennach unten

Liste nicht Array

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

nach obennach unten

Liste nicht Array

Die folgende Nachricht zum Thema stammt von: Kurt Z, 31. 12. 2007, 03:11

Crossposting
http://board.perl-community.de/thread/11086/

nach obennach unten

Array durchlaufen

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 gibt

my $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

nach obennach unten

Array durchlaufen

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.

nach obennach unten

Array durchlaufen

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

nach obennach unten

Array durchlaufen

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.

nach obennach unten

Array durchlaufen

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.

nach obennach unten

Array durchlaufen

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.

nach obennach unten

Array durchlaufen

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.

nach obennach unten

Array durchlaufen

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.

nach obennach unten

Array durchlaufen

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

nach obennach unten

Array durchlaufen

Die folgende Nachricht zum Thema stammt von: Struppi, 04. 01. 2008, 00:28

»» mein Code hatte keine Warnungen etc. erzeugt

Bei mir schon.

Struppi.

nach obennach unten

Moderatorenmoderation

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

nach obennach unten

Qualität von Beispielcode

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.

nach obennach unten

Qualität von Beispielcode

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

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von Dezember

© 1998-2006 Seite Impressum, Software: Classic Forum