Schrift
[thread]10471[/thread]

Frage zu Perl Syntax



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
fabmo
 2007-09-26 17:54
#100014 #100014
User since
2007-09-18
26 Artikel
BenutzerIn
[default_avatar]
Hallo, mal ne kleine Frage zu einem Syntax über den ich gerade gestolpert bin.

for ($i=1; $i<5 ;$i++)
{

$test[@test] = "$i";
}


Leider habe ich das in dieser Form noch nicht gefunden. test ist nun eine Liste und eine Variable zugleich? Wozu dient das? Gibts das auch mit Hashes?

Vielen Dank

fabmo
#Kein Kommentar
 2007-09-26 18:03
#100015 #100015
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
eine liste gibt im scalaren kontext die anzahl seiner elemente zurück (vorsicht!
nicht den letzten index).
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Taulmarill
 2007-09-26 18:09
#100016 #100016
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Sowohl bei @test als auch bei $test[] handelt es sich im Prinzip um die selbe Variable. Allerdings wird einmal auf den ganzen Array @test und das andere mal auf ein einzelnes Element des Arrays - z.B. $array[5] - zugegriffen.

In dem von dir geposteten Beispiel wird die Sache noch etwas komplizierter (und IMHO vom Stil her schlecht). Nehmen wir uns erst einmal @test vor. Das ist ein Array. Normalerweise würde dieser eine Liste seiner Elemente zurückgeben. Nun ist es aber in Perl so, dass jede Funktion, Variable, etc. weiß, was man von ihr erwartet. In diesem Speziellen Fall, erwartet perl an dieser Stelle keine Liste, sondern einen Scalar - also einen einzelnen Wert. Wenn man einen Array in so einem "scalaren Kontext" setzt, liefert er keine Liste mehr zurück, sondern die Anzahl seiner Elemente. Diese Zahl wird jetzt als Index für $test[] verwendet. Da die Zahl der Elemente eines Arrays im Normalfall dem nächsten undefinierten (leeren) Index entspricht (Arrays fangen normalerweise bei null und nicht bei einsan zu zählen) wird mit diesem Code also der Array "test" mit den Zahlen von eins bis fünf gefüllt. Die Anführungszeichen um $i erfüllen dabei soweit ich sehen kann keinen Sinn.

Schlechter Stil ist das deshalb, weil ein Array in Perl nicht unbedingt mit dem Index null beginnen muss. Robuster währe folgendes:
Code (perl): (dl )
push @test, $i;
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
pq
 2007-09-26 18:15
#100017 #100017
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Taulmarill+2007-09-26 16:09:13--
Schlechter Stil ist das deshalb, weil ein Array in Perl nicht unbedingt mit dem Index null beginnen muss.

zwar ist hier push tatsächlich die lösung der wahl, jedoch kann man in modernen perl-versionen
("As of release 5 of Perl") die indizierung nur noch selbst verändern und nicht global, das
heisst, wenn man in der datei, in der sich der code befindet, sowas nicht macht (also nicht
$[ verändert), kann einem nichts passieren.
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
fabmo
 2007-09-26 18:24
#100020 #100020
User since
2007-09-18
26 Artikel
BenutzerIn
[default_avatar]
Okay habe ich verstanden....trotzdem merkwürdig.

Aber schonmal vielen Dank.
lichtkind
 2007-09-26 19:18
#100023 #100023
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
statt
Code (perl): (dl )
1
2
3
for ($i=1; $i<5 ;$i++) {
    $test[@test] = "$i";
}


könnte man einfacher auch schreiben:
Code (perl): (dl )
@test = (1..4);

selbst
Code (perl): (dl )
@test = (1,2,3,4);

wäre noch weit einfacher, kürzer und verständlicher. ich glaube nicht das es bis 5 geht, denn im schleifenkopf steht ja $i < 5;
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
fabmo
 2007-09-27 10:37
#100051 #100051
User since
2007-09-18
26 Artikel
BenutzerIn
[default_avatar]
Das ist aber echt trickreich.. Oder ist das ganz übliche Perl Syntax?

Da ich im Moment mir noch alle Informationen aus dem Internet zusammensuche überlege ich mal in ein Buch investiere. Kennt jemand eins welches wirklich emfehlenswert ist? Ich dachte da an dieses Perl Tk kurz und gut.
aber das behandelt wahrscheinlich nur TK oder?

Schonmal im Vorraus Danke.
renee
 2007-09-27 10:58
#100052 #100052
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das was lichtkind gezeigt hat ist übliche Perl Syntax...

Wiki:Ein paar Buchempfehlungen.
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/
lichtkind
 2007-09-27 16:43
#100070 #100070
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
klar ist perl/tk über tk. wenn du ein gutes perl buch suchst schau mal in unsre wiki da sind empfehlungen oder sag genauer was du suchst.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Inferno
 2007-09-28 03:02
#100092 #100092
User since
2007-06-29
19 Artikel
BenutzerIn
[default_avatar]
hallo!
ich persönlich würde dir als lehrbuch PERL in 21 Tagen von Laura Lemay - Markt & Technik verlag empfehlen. ich habe mir schon eine ganze reihe von perl lehrbüchern angesehen und finde, dass dieses buch am besten einen überblick über perl geben kann. wie gesagt, es ist kein nachschlagewerk sondern ein richtiges buch zum lernen mit vielen übungsaufgaben+lösungen.

mit 800 seiten bietet dieses buch auch keine oberflächliche einführung in perl. es werden sogar referenzen ziemlich intensiv behandelt und zum schluss eine kleine einführung in objektorientiertes perl gegeben. genau bei diesen dingen wird meistens erst in fortgeschrittener literatur eingegangen, bei der dann eventuell erklärungen ein wenig zu kurz kommen und schon viel wissen vorrausgesetzt wird.
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2007-09-26 17:54.