Schrift
[thread]8666[/thread]

threads => Grundwissen (Seite 5)

Leser: 4


<< |< 1 2 3 4 5 6 >| >> 51 Einträge, 6 Seiten
renee
 2007-01-28 20:10
#73472 #73472
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, Du warst nicht unfreundlich, aber wir bräuchten Code, um zu sehen, warum der Fehler auftaucht. Hellsehen können wir hier (noch) nicht :D
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:23
#73473 #73473
User since
2006-11-26
384 Artikel
BenutzerIn

user image
prepare:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
sub prepare() {
my $file = $liste;
  my (@liste_1, @liste_2);
  
  tie my @array, 'Tie::File', $file or die $!;

  my $index = int(scalar(@array) / 2);

  @liste_1 = @array[0..$index];
  @liste_2 = @array[$index+1..$#array];

  print "[+] Ok - list should be prepared!\n";
  
  my $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_1);
  $thr1 = threads->create(\&abfrage, $nick, $proxy, $host, $login, @liste_2);

}


abfrage:

Code (perl): (dl )
1
2
3
sub abfrage() {
print @liste_1;
}


Uebrigens: Vielen Vielen x100 Dank das du mir hier so toll hilfst!
Also ich glaub wenn ich Geburtstag hab spend ich was an perl-community...

schoenes Wochenende

rperl

ach ja: hast du ICQ?\n\n

<!--EDIT|RPerl|1170008645-->
renee
 2007-01-28 20:33
#73474 #73474
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die Arrays sind nur in der Subroutine prepare sichtbar (Stichwort "Gültigkeitsbereich"). Sie sind _nicht_ global!

Das ist aber auch gut so; deshalb arbeitet man mit Übergabeparameter.

Vielleicht hilft Dir zum Thema Gültigkeitsbereich auch dieser Wiki:Artikel weiter...
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:35
#73475 #73475
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Übrigens: Lass die () nach dem Methodennamen weg. In Perl nutzt man die nur für Prototypen und nicht für Parameterlisten wie in C oder Java...

Ich habe kein ICQ...
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:36
#73476 #73476
User since
2006-11-26
384 Artikel
BenutzerIn

user image
hm und wie werd ich damit fertig? Bzw wie krieg ich @liste_1 in abfrage rein?
Ich koennte die hoechstens global setzen. Aber das bringt auch nix... weil leer sind sie dann immer noch..
topeg
 2007-01-28 21:09
#73477 #73477
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Allso ein wenig informationen wie man Werte an eine Funktion übergibt.

Nemen wir mal ein Funktion und nennen sie "test". An test übergeben wir Werte.
Code (perl): (dl )
&test($wert1,$wert2,$wert3,@array1);

Die zu übergebenen Werte werden in "@_" deponiert und sind in der Funktion selber darüber erreichbar. bedenke aber, das bei "@array" nicht das array als Referenz sondern als Liste des Inhaltes übergeben wird. Selbisges Gilt auch für Hashes (siehe dazu die Hash/Array-Überführbarkeit).
Wenn du allso eine Funktion "test" schreibst, so kannst du die übergeben Werte wie folgt abrufen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub test
{
 my ($w1,$w2,$w3,@a1)=@_;
 # oder:
 my $w1=shift(@_);
 my $w2=shift(@_);
 my $w3=shift(@_);
 my @a1=@_;
 # oder:
 my $w1=$_[0];
 my $w2=$_[1];
 my $w3=$_[2];
 my @a1=@_[3..$#_];
}


Mal als vollständiges Script:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
use warnings;

sub test
{
  my ($wert1,$wert2,$array_ref,@array)=@_;
  print "Ich bin $wert1\n";
  print "Das ist $wert2\n";
  print 'Ich bin '.join(', ',@$array_ref)."\n";
  print 'Ich bin nicht '.join(', ',@array)."\n";
}

my @array_a=('schlau', 'geschickt', 'gutmuetig');
my @array_b=('gross', 'schnell', 'beinhart');

&test('Programmierer', 'eine Funktion', \@array_a, @array_b);



Sowas sollte aber in jeder Einführung zu Perl zu finden sein.
renee
 2007-01-28 21:11
#73478 #73478
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wie gesagt: Dafür arbeitest Du ja mit Parametern...

Deine abfrage-Methode müsste dann ungefähr so aussehen:
Code: (dl )
1
2
3
4
sub abfrage{
my ($name, $proxy, $comp, $user, @liste) = @_;
print "Your name: $name - Proxy: $proxy - Host: $comp ...\n";
}
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/
PerlProfi
 2007-01-28 23:24
#73479 #73479
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Und damit du nicht die ganze Liste in @_ packen musst, kannst du eben auch eine Referenz auf die Liste reintuen.
Dann sieht abfrage() eben so aus:
Code: (dl )
1
2
3
4
5
sub abfrage{
my($name, $proxy, $comp, $user, $liste) = @_;
my @liste = @$liste;
print "Your name: $name - Proxy: $proxy - Host: $comp ...\n";
}


edit:
Und du musst einen backslash for @liste_x im Funktionsaufruf schreiben.

MfG PerlProfi\n\n

<!--EDIT|PerlProfi|1170019590-->
RPerl
 2007-02-14 21:44
#73480 #73480
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Ok - hab nun fast alles feritig.
Ich mache ganz am Schluss in Sub prepare folgendes:

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


soweit alles ok.

in abfrage hab ich dann aber wieder das Prob.
Wie kann ich dem thr1 @liste_1 durchlaufen lassen mit einer for und liste_1[$i] und wie kann ich dem thr2 @liste_2 durchgehen lassen mit einer for schleife liste_2[$i]
Das alles muss in EINER Subfunktion(&abfrage) geschehen.
das ist das ganze Problem

// Edit:
Hab in &abfrage mal das:
Code (perl): (dl )
1
2
3
4
5
6
7
sub abfrage {
   my ($arref) = @_;
   for my $element(@$arref){
       print $element;
   }
}
}


das klappt auch... aber hat damit dann auch jeder der beiden threads eine andere liste?
Zum Test habe ich mal eine Liste angelegt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
123
adolf
hitler
wingston
churchill
stalin
grad
schule
scheisse
igor


Dann bekomme ich "123adolfhitlerwingstonchurchillstalin"
Und mehr nicht. Und was ist mit'm anderen thread?!\n\n

<!--EDIT|RPerl|1171482806-->
renee
 2007-02-14 21:54
#73481 #73481
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die Sub "abfrage" im 1. Thread kennt _nur_ @liste_1 und der zweite Thread kennt nur @liste_2 - wenn Du schön mit den Parametern arbeitest und nicht versuchst auf "globale" Variablen arbeitest.

Du solltest übrigens eine Referenz auf das Array übergeben, sonst ist es sehr umständlich den Nick, Proxy und Host dort wieder rauszuholen.

Bitte perlsub dazu lesen...
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/
<< |< 1 2 3 4 5 6 >| >> 51 Einträge, 6 Seiten



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