Schrift
[thread]6427[/thread]

for-schleife: wie ging das nochmal?



<< >> 9 Einträge, 1 Seite
pktm
 2004-07-23 18:44
#84883 #84883
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Ich habe so eine Datenstruktur:
Code: (dl )
1
2
3
4
5
6
7
8
my $images = [
{
alt => alt,
desc => desc,
src => src,
width => undef,
},
];

(das sind daten von Bildern)
Diese möchte ich jetzt durchlafen und dabei die Nummer des Arrayeintrages erhlaten.
Das ding so so in etwa:
Code: (dl )
1
2
3
for( 0..$#{$images} ){
print "Nr: $_\n";
}

Stimmt das oder wie ging das nochmal?
mfg pktm

Bearbeitet von Crian: obere CODE-Tags hinzugefügt und pktm's schöne TAB-Einrückungen in Leerzeicheneinrückungen übertragen zur besseren Darstellung\n\n

<!--EDIT|Crian|1090614998-->
http://www.intergastro-service.de (mein erstes CMS :) )
betterworld
 2004-07-23 18:50
#84884 #84884
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ja, das sollte gehen. Ich sehe kein Problem.
Taulmarill
 2004-07-23 22:13
#84885 #84885
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
also folgendes programm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use warnings;

my $images = [
{
alt => 'alt',
desc => 'desc',
src => 'src',
width => 'undef',
},
];

for ( 0 .. $#{$images} ) {
print "Nr: $_\n";
}


liefert bei mir folgende ausgabe:
Code: (dl )
Nr: 0


was auch völlig richtig ist, der array enthält ja nur ein element, nämlich die referenz auf den hash.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
format_c
 2004-07-23 22:34
#84886 #84886
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich mache das immer mit scalar. Hab mal gehört, dass $# langsamer sein soll.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
format_c@server:~> perl
my $arrayref = [qw/eins zwei drei vier/];
for (0 .. scalar @$arrayref - 1) {
print "Nr: ",$_,"\n";
}

Nr: 0
Nr: 1
Nr: 2
Nr: 3
format_c@server:~>


Gruß Alex
pktm
 2004-07-23 23:04
#84887 #84887
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, gut.
War nämlich auf der Arbeit und konnte nicht testen...
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2004-07-24 01:14
#84888 #84888
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=format_c,23.07.2004, 20:34]Ich mache das immer mit scalar. Hab mal gehört, dass $# langsamer sein soll.[/quote]
ich vermute mal, dass die Geschwindigkeitsunterschiede da marginal sind, weswegen man IMHO die Loesung verwenden sollte, die leichter verstaendlich ist... ich verwende scalar, wenn ich die anzahl der Elemente brauche, und $# fuer den letzten Index. scalar(@list) - 1 ist mir meistens zu lang zum tippen, und $#list finde ich da einfach besser lesbar...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2004-07-24 13:56
#84889 #84889
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich verwende
for (0..$#array)
oder
for (0..@array-1)
aber ich verwende nie scalar(). das scalar ist in verbindung mit -1
sowieso implizit da.
dass $#array langsamer sein soll, kann ich mir gar nicht vorstellen, da musst
was verwechseln, format_c.
es war mal verpönt, $#array zu verwenden, da es durch setzen der variable $[
verfälscht werden kann:
Code: (dl )
1
2
3
4
5
6
7
$ perl -wle'
@a = qw(a b c d);
print $#a;
$[ = 2;
print $#a'
3
5

seit perl5 ist es aber nur noch eine compiler-direktive, die beschränkt
wird auf die datei, so dass man selbst schuld ist, wenn man $[ irgendwo
setzt.
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
Strat
 2004-07-25 00:41
#84890 #84890
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=pq,24.07.2004, 11:56]es war mal verpönt, $#array zu verwenden, da es durch setzen der variable $[ verfälscht werden kann:[/quote]
Code: (dl )
1
2
for ($[..$#array) {
...

habe ich frueher haeufiger verwendet, aber jetzt schon jahrelang nicht mehr... denn wer $[ ohne local in Produktionssoftware veraendert, gehoert IMHO immer noch standesrechtlich erschossen
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2004-07-25 02:18
#84891 #84891
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Code: (dl )
perl -e 'for (0..4) { eval "\$[=$_; print substr(q/ollah/,4,1);" or die $@};print "\n"'
<< >> 9 Einträge, 1 Seite



View all threads created 2004-07-23 18:44.