Schrift
[thread]7382[/thread]

der wievielte durchlauf einer for schleife?



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
vayu
 2005-10-21 19:42
#59114 #59114
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
hallo ;)

ich habe ne stinknormale for-schleife

Code: (dl )
1
2
3
for(0..100) {

}


wie kriege ich heraus, in welchem durchlauf ich mich grad befinde? muss ich nen eigenen counter mitlaufen lassen?

habe in perldoch perlvar nix gefunden. Für FILEHANDLEs gibts ja den $. sowas in der art suche ich.

achja und noch was dazu. in der forschleife, möchte ich von mir benannte variablen neu besetzen.

$ent1
$ent2
$ent3
etc ...

ihr ahnt es bestimmt, genau ich möcht das halt in der forschleife tun und dann die durchlaufnummer einfach an die variable anhängen. Wie funktioniert das?

Danke im voraus :)
Ronnie
 2005-10-21 19:51
#59115 #59115
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
$_ - für den ersten Teil.

Für den zweiten, klingt das so als wäre es da sinnvoller einen Hash zu verwenden.\n\n

<!--EDIT|Ronnie|1129909982-->
jan
 2005-10-21 19:52
#59116 #59116
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
a) in $_ steht das aktuelle element, also beim ersten durchlauf 0 usw.
b) nimm einen hash
Code: (dl )
1
2
3
4
5
my %daten = ();
for(0..100)
{
$daten{'ent' . $_} = 'bla' . $_;
}
vayu
 2005-10-21 19:53
#59117 #59117
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
http://www.online-age.de/forum/images/smilies/kopf...

ok da stand ich grad aufm schlauch :D

aber wie papp ich denn jetzt das $_ an meinen variablerumpf dran?

stimmt .. nehm ich n hash :)

Danke\n\n

<!--EDIT|vayu|1129910107-->
vayu
 2005-10-21 20:12
#59118 #59118
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
%labels = {
"lab1" => $frm_name->Label(-text=>"Server name:"),
"ent1" => $frm_name->Entry(),
"lab2" => $frm_name->Label(-text=>"Server domain:"),
"ent2" => $frm_name->Entry(),
"lab3" => $frm_name->Label(-text=>"User name:"),
"ent3" => $frm_name->Entry(),
"lab4" => $frm_name->Label(-text=>"Password:"),
"ent4" => $frm_name->Entry()
};
for(1..4) {
$labels{'lab'.$_}->pack();
$labels{'ent'.$_}->pack();
}


hmmm .. das gibt mir leider nen undef hash zurück O.o

Fehlermeldung (Zeile 64 ist da wo mein code beginnt):

Quote
Reference found where even-sized list expected at pin-mail.pl line 64.
Tk::Error: Can't call method "pack" on an undefined value at pin-mail.pl line 76
.
Tk callback for .frame
main::addNewMailAccount at pin-mail.pl line 76
Tk callback for .button1
Tk:: at C:/Perl/site/lib/Tk.pm line 252
Tk::Button::butUp at C:/Perl/site/lib/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)
frodus
 2005-10-21 20:20
#59119 #59119
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
Es geht auch so:

perl -e '$arg0 = 0; $arg1 = 1; for(0..1) {print "arg$_ = ".eval("$arg$_")."\n";}'

Aber ein Hash ist natuerlich besser.

/Frodus:)
frodus
 2005-10-21 20:21
#59120 #59120
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
[quote=vayu,21.10.2005, 18:12]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
%labels = {
"lab1" => $frm_name->Label(-text=>"Server name:"),
"ent1" => $frm_name->Entry(),
"lab2" => $frm_name->Label(-text=>"Server domain:"),
"ent2" => $frm_name->Entry(),
"lab3" => $frm_name->Label(-text=>"User name:"),
"ent3" => $frm_name->Entry(),
"lab4" => $frm_name->Label(-text=>"Password:"),
"ent4" => $frm_name->Entry()
};
for(1..4) {
$labels{'lab'.$_}->pack();
$labels{'ent'.$_}->pack();
}


hmmm .. das gibt mir leider nen undef hash zurück O.o

Fehlermeldung (Zeile 64 ist da wo mein code beginnt):

Quote
Reference found where even-sized list expected at pin-mail.pl line 64.
Tk::Error: Can't call method "pack" on an undefined value at pin-mail.pl line 76
.
Tk callback for .frame
main::addNewMailAccount at pin-mail.pl line 76
Tk callback for .button1
Tk:: at C:/Perl/site/lib/Tk.pm line 252
Tk::Button::butUp at C:/Perl/site/lib/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)
[/quote]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$labels = {
"lab1" => $frm_name->Label(-text=>"Server name:"),
"ent1" => $frm_name->Entry(),
"lab2" => $frm_name->Label(-text=>"Server domain:"),
"ent2" => $frm_name->Entry(),
"lab3" => $frm_name->Label(-text=>"User name:"),
"ent3" => $frm_name->Entry(),
"lab4" => $frm_name->Label(-text=>"Password:"),
"ent4" => $frm_name->Entry()
};
for(1..4) {
$labels->{'lab'.$_}->pack();
$labels->{'ent'.$_}->pack();
}


Vielleich so?

/Frodus
vayu
 2005-10-21 20:24
#59121 #59121
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
nein, dann isses doch kein hash mehr oder?

hab den oben mit

my %labels = ();

deklariert. wenn ich jetzt einfach n $ davor schreib dürfte es ne fehlermeldung geben.


edit: jupp gibts es

Quote
Global symbol "$labels" requires explicit package name at pin-mail.pl line 64.
Execution of pin-mail.pl aborted due to compilation errors.
\n\n

<!--EDIT|vayu|1129912009-->
frodus
 2005-10-21 20:30
#59122 #59122
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
Ja richtig, es handelt sich dann um eine Reference auf ein Hash.

Code: (dl )
1
2
3
4
5
6
7
my %hash = (test => 1); # Hash 
my $hash_ref = {test => 1}; # Hash Reference

# Zugriff:

$hash{test} = 2;
$hash_ref->{test} = 2;


Sollte also funktionieren.

Gruss,

Frodus
vayu
 2005-10-21 20:31
#59123 #59123
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
dann muss ich es oben aber anders deklarieren.

moment
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-10-21 19:42.