Toon posts:

PERL: van array naam verwisselen in loop

Pagina: 1
Acties:

Verwijderd

Topicstarter
Probleem:

stel ik heb een lijstje van arrays met op een volgende namen:
my @test1 = (1, 2, 3);
my @test2 = (6, 7, 5);
my @test3 = (5, 9, 3);

nou wil ik van alle drie de arrays de laatste index printen.
het liefst m.b.v een loop want dat bespaart code (zeker als je een lijst van 30 arrays hebt ofzo). Hoe krijg ik de loop zo dat bij iedere ronde de volgende array wordt gepakt om te bewerken. in pseudocode wordt het zoiets:

my $i=1;
while (er arrays zijn){
print @test($i)[3] ; #hier zit 'm het probleem, hoe krijg ik die naam variabel.
$i++;
}

Iemand een idee? Alvast Bedankt!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

wat is er mis met een geneste array?
Perl:
1
2
3
4
5
my @test = ( 
  (1, 2, 3),
  (6, 7, 5),
  (5, 9, 3)
);
zou je toch een heel eind moeten komen, of zie ik dat nou verkeerd :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

zoiets:

Perl:
1
2
3
4
5
6
foreach (\@test1, \@test2, \@test3)
{
my(@tmpArray)=@$_;

print "$tmpArray[2]\n";
}

Verwijderd

Topicstarter
na een beetje prutsen heb ik het met die geneste arrays werkend gekregen.
De tweede mogelijkheid vat ik nog niet helemaal.
Het is dus niet mogelijk om perl een verzameling van variabelen als naam van een array te laten lezen. zoiets als dit maar dan dat 't werkt :) :
$i=1 en @array($i) geeft @array1

Errug bedankt voor de hulp in ieder geval.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ik weet eerlijk gezegd niet of dat mogelijk is, maar ik weet wel dat het ongelooflijk vies is. Arrays bestaan niet voor niets. Als je dan variabelenamen als test1, test2 en test3 gaat gebruiken, vergeet je dus de ultieme toepassing van arrays.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

drm schreef op 20 December 2002 @ 15:37:
wat is er mis met een geneste array?
Perl:
1
2
3
4
5
my @test = ( 
  (1, 2, 3),
  (6, 7, 5),
  (5, 9, 3)
);
zou je toch een heel eind moeten komen, of zie ik dat nou verkeerd :?
Als ik mij niet vergis krijg je dan een array met 9 elementen, het moet zo volgens mij:
Perl:
1
2
3
4
5
my @test = ( 
  [1, 2, 3],
  [6, 7, 5],
  [5, 9, 3]
);
Verwijderd schreef op 20 December 2002 @ 15:31:
my $i=1;
while (er arrays zijn){
print @test($i)[3] ; #hier zit 'm het probleem, hoe krijg ik die naam variabel.
$i++;
}

Iemand een idee? Alvast Bedankt!
Kan dat niet zo? (alhoewel het dus idd wel vies is):
Perl:
1
2
3
4
for($i=1;$i<=3;$i++) {
   print ${'test'.$i}[2]; # gebruik $ ipv @, je wilt een scalar terug
                          # niet een array, en 2 is het laatste element, niet 3
}

Verwijderd

drm schreef op 20 december 2002 @ 16:59:
Ik weet eerlijk gezegd niet of dat mogelijk is, maar ik weet wel dat het ongelooflijk vies is. [...]
Het kan wel, met eval, maar dat is behoorlijk vies...

Verwijderd

Topicstarter
Ik was ook al op eval gestuit, maar hoe langer ik er over nadenk hoe viezer ook ik het vind worden. daarom kon ik het natuurlijk ook al nergens vinden. Het is gewoon een slechte programmeer methode. ik denk dat het met geneste arrays het beste gaat (zoals Zef zegt is het correct BTW). Bedankt!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Zef heeft idd helemaal gelijk :o * drm moet ook niet op Perl vragen antwoorden :X :D

eval kende ik wel, maar eval geef ik nooit als oplossing. Daar wordt de wereld niet bepaald beter van, nl. ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

drm schreef op 21 december 2002 @ 13:37:
Zef heeft idd helemaal gelijk :o * drm moet ook niet op Perl vragen antwoorden :X :D

eval kende ik wel, maar eval geef ik nooit als oplossing. Daar wordt de wereld niet bepaald beter van, nl. ;)
Tenzij je zelf embeded perl ontwikkelt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$" = "";

open(HANDLE, $ARGV[0]);
my @html = <HANDLE>;
close HANDLE;

print "Content-type: text/html\n\n";
my $_html = "@html";
while($_html =~ /<\?perl(.*?)\?>|((.(?!<\?perl))*.)/gs)
{
 print STDOUT $2;
 eval $1;
 if($@) { print STDOUT "<b>" . $@ . "</b><br>\n"; };
}
Daar kan je nu dit door halen:
code:
1
2
3
4
<?perl
our $tekst = "test";
?>
<html><body><?perl print $tekst ?></body></html>
Dit is het enige waarvoor ik eval gebruik, maar dit geheel off-topic...

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Daar is toch ook een module voor?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1