Schrift
[thread]8666[/thread]

threads => Grundwissen (Seite 4)

Leser: 4


<< |< 1 2 3 4 5 6 >| >> 51 Einträge, 6 Seiten
RPerl
 2007-01-27 18:15
#73462 #73462
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
3
4
5
6
sub abfrage{
   my ($arref) = @_;
   for my $element(@$arref){
       print $element;
   }
}
nepos
 2007-01-27 18:20
#73463 #73463
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das nimmt den ersten Parameter, den du an abfrage() übergibst als Array-Referenz und zeigt dir dann über die For-Schleife alle Elemente des Arrays an.
RPerl
 2007-01-28 18:42
#73464 #73464
User since
2006-11-26
384 Artikel
BenutzerIn

user image
ja aber inwiefern hilft mir das?
Hab hier 2 Variablen @liste_1 und @liste_2
Und die muss ich beide gleichzeitig durchgehen. Also z.B. Thread1 macht @liste_1 und thread2 macht @liste_2

Aber wenn nun in &abfrage() das hier steht
Code (perl): (dl )
1
2
3
4
5
#...
for($i=1;$i<=100;$i++) {
print @liste_1[$i];
}
#...

dann macht er ja nur @liste_1. Und was mach ich mit @liste_2 ?\n\n

<!--EDIT|RPerl|1170002568-->
PerlProfi
 2007-01-28 18:53
#73465 #73465
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Wenn du eine Arrayreferenz an abfrage() übergibst, kannst du beide Listen mit abfrage() bearbeiten.
Du musst nur bei der Threaderstellung darauf achten, dass der erste thread abfrage() mit \@liste_1 als ersten parameter aufruft und der zweite thread \@liste_2 an abfrage() übergibt.

Wenn du nicht so gerne mit Arrayreferenzen arbeitest, kannst du am Anfang von abfrage noch folgendes hinzufügen:
Code: (dl )
1
2
3
4
5
sub abfrage(\@)
{
my($arrayref) = @_;
my @liste = @$arrayref;
# ...


MfG PerlProfi
renee
 2007-01-28 18:54
#73466 #73466
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei mir steht kein @liste_1. Man sollte nicht auf globale Variablen zugreifen. Deswegen arbeite ich ja mit der Referenz.

Bei
Code: (dl )
1
2
3
4
5
6
sub abfrage{
my ($arref) = @_;
for my $element(@$arref){
print $element;
}
}


Hole ich den Übergabeparameter und arbeite diesen ab. Das einen begrenzten Gültigkeitsbereich...

Die beiden Threads bekommen jeweils eine andere Liste...
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/
RPerl
 2007-01-28 18:57
#73467 #73467
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Quote
Die beiden Threads bekommen jeweils eine andere Liste...

und wie???
In welcher variable steht was? Warum $element?
Was macht
Code (perl): (dl )
   my ($arref) = @_;


...? Wie soll das funktionieren?\n\n

<!--EDIT|RPerl|1170003460-->
RPerl
 2007-01-28 19:09
#73468 #73468
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Im uebrigen:

Code: (dl )
1
2
3
4
Can't use string ("IgorMorkof") as an ARRAY ref while "strict refs" in use at
blah.pl line 88, <$fh> line 20 (#1)
(F) Only hard references are allowed by "strict refs". Symbolic
references are disallowed. See perlref.



edit: noch eine Frage. Ich habe in der Funktion &prepare folgendes:

Code (perl): (dl )
1
2
 my $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_1);
  $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_2);


Wenn ich nun in der Funktion abfrage folgendes mache:

Code (perl): (dl )
print @liste_1;


Zum Test, ob er die Variable findet, sagt er er findet sie nicht.
Warum?\n\n

<!--EDIT|RPerl|1170005548-->
renee
 2007-01-28 19:54
#73469 #73469
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du übergibst eine Liste, während ich eine Arrayreferenz übergeben habe! perlreftut (deutsch)

$element ist jeweils das aktuelle Element aus dem Array. In deinen C-Style-Schleifen wäre das das gleiche wie
Code (perl): (dl )
1
2
3
for(my $i = 0; $i < $length; $i++){
    my $element = $array[$i];
}


Woher die Sub weiß, welche Liste benutzt werden soll? Anhand der Übergabeparameter...

Woher weiß Dein Mitarbeiter, welchen Kunden anrufen soll? Anhand der Visitenkarte, die Du ihm übergeben hast...

Code (perl): (dl )
my ($arrayref) = @_


ist das gleiche wie in Java:
Code: (dl )
1
2
public void Methodenname(ArrayRef arrayref){
}
(vorausgesetzt man schreibt noch eine Klasse ArrayRef...

Vielleicht solltest Du Dir erstmal ein paar Grundlagen über Perl anlesen, bevor Du mit komplexen Dingen wie Threads anfängst.

Gute Lektüren:
perlintro
perlsub
perlreftut
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/
renee
 2007-01-28 20:00
#73470 #73470
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=RPerl,28.01.2007, 18:09]edit: noch eine Frage. Ich habe in der Funktion &prepare folgendes:

Code (perl): (dl )
1
2
 my $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_1);
  $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_2);


Wenn ich nun in der Funktion abfrage folgendes mache:

Code (perl): (dl )
print @liste_1;


Zum Test, ob er die Variable findet, sagt er er findet sie nicht.
Warum?[/quote]
Dazu müssten wir Deinen Code kennen...

Wiki:Lesenswert
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/
RPerl
 2007-01-28 20:03
#73471 #73471
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Ok - deinen code hab ich nun halbwegs kapiert, danke!

Aber das Problem ist, dass wenn ich:

Code (perl): (dl )
1
2
my $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_1);
  $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_2);

In der Funktipn prepare()
Findet er in Funktion abfrage() @liste_1/2 nicht.

// edit:
http://faq.perl-community.de/bin....mmunity

kenn ich schon. Was habsch denn falsch gemacht? War ich unfreundlich? WOllt ich nicht sein, sorry.
Bin sehr dankbar das mir geholfn wird. Aber anscheinend ist threads echt verbuggt. Hab das auch von anderen coden gehoert\n\n

<!--EDIT|RPerl|1170007758-->
<< |< 1 2 3 4 5 6 >| >> 51 Einträge, 6 Seiten



View all threads created 2007-01-21 18:07.