Schrift
[thread]8669[/thread]

Funktion mit Parameterübergabe: Parameter-Variable wird falsch gesetzt



<< >> 7 Einträge, 1 Seite
TheDHK
 2007-01-22 16:04
#73488 #73488
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Hi,
ich habe in einem Perl-Skript folgende for-Schleife:
Code (perl): (dl )
1
2
3
4
5
for(my $j = 0;$j < @name;$j++) {
  $profilframe->Label( -image => $photos[$j], -background => 'sky blue' )->place(-x=>'5', -y => $y + 3);
  $profilframe->Button( -text=>$name[$j], -background => 'sky blue', -font=>'{Bimini} 12 {bold}', -relief=>'flat', -activebackground => 'yellow', -command => sub { zeige_beschreibung($j); } )->place(-x=>'28p', -y => $y);
  $y += 35;
  }

Dadurch werden zwei Buttons erzeugt. Wie ihr seht, rufe ich bei command eine Subroutine mit einem Parameter auf. Der übergebene Parameter sollte beim ersten Button 0 sein und beim zweiten 1 (ist ja logisch, da $j ja bei jedem Schleifendurchlauf um 1 erhöht wird). Die dazugehörige Subroutine sieht so aus:
Code (perl): (dl )
1
2
3
sub zeige_beschreibung {
  print $_[0];
}

Drücke ich nun auf einen der Buttons (egal auf welchen), so wird stets 2 im DOS-Fenster ausgegeben (ich lasse ja mit "print $_[0];" den übergebenen Parameter ausgeben). Das wundert mich doch sehr, da er ja eigentlich beim ersten Button 0 und beim zweiten 1 ausgeben werden müsste. Weiß jemand, warum das so komisch ist und wie ich das ändern kann?

Gruß

TheDHK
renee
 2007-01-22 16:34
#73489 #73489
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mach mal:
Code: (dl )
1
2
3
4
5
6
for my $j(0..scalar(@name)-1) {
my $test = $j;
$profilframe->Label( -image => $photos[$j], -background => 'sky blue' )->place(-x=>'5', -y => $y + 3);
$profilframe->Button( -text=>$name[$j], -background => 'sky blue', -font=>'{Bimini} 12 {bold}', -relief=>'flat', -activebackground => 'yellow', -command => sub { zeige_beschreibung($test); } )->place(-x=>'28p', -y => $y);
$y += 35;
}
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/
pq
 2007-01-22 17:46
#73490 #73490
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=renee,22.01.2007, 15:34]
Code: (dl )
for my $j(0..scalar(@name)-1) {
[/quote]
oder gleich
for my $j (0 .. $#name) {
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
TheDHK
 2007-01-22 17:50
#73491 #73491
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Vielen Dank Renee, jetzt funktionierts.

Gruß

TheDHK
TheDHK
 2007-01-22 18:23
#73492 #73492
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Hi,
ich bins nochmal. Ich habe jetzt ein anderes Problem. Da ja jetzt der richtige Parameter übergeben wird, habe ich die Funktion ein wenig umgebaut:
Code (perl): (dl )
1
2
3
4
sub zeige_beschreibung {
  my $ausgabe = $description[$_[0]];
  $infoframe->Label( -text=>$ausgabe, -background => 'yellow' )->place(-x=>'5');
  }


Folgendes wird ausgegeben:
Klick auf Button 1:
Klick (ganz unten auf die rot eingerahmte Schrift schauen)
Klick auf Button 2:
Klick (ganz unten auf die eingerahmte Schrift schauen)

Wie ihr seht, ist bei der zweiten Ausgabe hinten noch ein "rt". Ich nehme an, dass das von der längeren vorhergehenden Ausgabe stammt. Hab schon ein bisschen mit undef() und so rumgespielt, aber das hat nichts verändert. Hat jemand ne Idee, wie man dieses "rt." wegkriegen könnte?

Gruß

TheDHK
renee
 2007-01-22 18:28
#73493 #73493
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest nicht immer wieder ein neues Label erzeugen, sondern immer nur das alte bearbeiten (z.B. mit $infolabel->configure(-text => $ausgabe)).

Du musst als das Label außerhalb der Subroutine erzeugen...
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/
TheDHK
 2007-01-22 18:49
#73494 #73494
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Tausend Dank, jetzt gehts.

Gruß

TheDHK
<< >> 7 Einträge, 1 Seite



View all threads created 2007-01-22 16:04.