Schrift
[thread]8677[/thread]

$_ und @_ übergeben



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
fraggs
 2007-01-24 13:53
#73552 #73552
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
Halloechen, habe ein riesen script was ich updaten soll und was neues rein packen soll doch hier ist das problem.

es gibt eine routine, routine1 die wird ausgefuert.
in der routine1 wird $_ und @_ übergeben und es werden zwei sachen verglichen (2 zip files) , wenn array1 mit dem index matched dann geht das script in die naechste routine ( 2 ) wo die daten die in $_ und @_ die in routine 1 drin standen wieder gebraucht werden.

ich habe dies mit globalen variabeln probiert aber ich habs nicht hingekriegt. geht dass ?

gruß

-stephan

ps:ich kann source code posten allerdings etwas lang aber hier ein bisschen psydo code so wie es aussieht:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use strict;
use warnings;

sub routine1
{
my $daten1 = $_;
my @daten2 = @_;

if(index($Zip[0],"Report") != -1)
{


routine2();
}
else
{



EmmaCov();
} &nbsp
;
}

sub routine2
{

###hier brauche ich die selben daten die in routine1 drin ###standen von $_ und @_ . normaler weise
my $test1 = $_;
my @test2 = @_;
###doch das geht nicht da beide ($_ und @_) schon in ###routine1 uebergeben worden sind.
}


tips ? ich probier nochmals die daten in eine globale variable zu ueber geben mal sehen obs klappt.
mmm twix
renee
 2007-01-24 14:31
#73553 #73553
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
use warnings;

sub routine1
{
my $daten1 = $_;
my @daten2 = @_;

if(index($Zip[0],"Report") != -1)
{
routine2($daten1,@daten2);
}
else
{
EmmaCov();
}
}

sub routine2
{
my ($test1,@test2) = @_;
# weiterer Code
}
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/
topeg
 2007-01-24 21:02
#73554 #73554
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code: (dl )
1
2
my $daten1 = $_;
my @daten2 = @_;

Das sieht für mich seltsam aus. In "$daten1" werden nie irgendwelche Daten vom Funktionsaufruf selber drin sein. In "@daten2" werden nie irgendwelche Daten landen die du außerhalb des Funktionsaufrufs in @_ gesetzt hast und nur wenn $_ vorher mit Daten gefüllt wurde, kann an $daten1 etwas übergeben werden.

allso so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub test
{
 my $v1=$_;
 my @v2=@_;
 print "V1=$v1 V2=@v2\n";
}


$_="ein kleiner Test";
@_=("TEST", "TEST2", 3, 4, 5);
&test;
$_="kein Test";
&test("TEST", "TEST2", 3, 4, 5);

Da bekommst du wirklich nicht das was du willst.

Korrekt wäre eine Funktionsdefinition so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
sub test
{
 my $v1=shift(@_);
 my @v2=@_;
 print "V1=$v1 V2=@v2\n";
}

&test("ein kleiner Test", "TEST", "TEST2", 3, 4, 5);
esskar
 2007-01-25 09:08
#73555 #73555
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=topeg,24.01.2007, 20:02]
Code (perl): (dl )
1
2
3
4
5
6
7
8
sub test
{
 my $v1=shift(@_);
 my @v2=@_;
 print "V1=$v1 V2=@v2\n";
}

&test("ein kleiner Test", "TEST", "TEST2", 3, 4, 5);
[/quote]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
# oder
sub test {
my ($v1, @v2) = @_;
# ...
}
# oder
sub test {
my ($v1, @v2) = (shift, @_);
# ...
}

je nach dem was man braucht!\n\n

<!--EDIT|esskar|1169708964-->
fraggs
 2007-01-25 10:54
#73556 #73556
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
also in der ersten routine kommt immer was und es steht auch immer was in $_ drin und auch in @_ . das problem ist nur ich habe die aufgeteilt weil ich einen vergleich mache nun brauche ich die daten fuer routine1 die in $_ und @_ drin stehen aber ich brauche auch genau die selben in routine2 . Ich habe es mit renees methode probiert aber es scheint nicht zu funktionieren.

ich habe nun ein paar prints eingebaut um zu sehen ob da irgendwas rueberkommt, ich teste nochmals und dann poste ich zurueck ob was geklappt hat

danke vielmals ihr seit ich klasse
mmm twix
renee
 2007-01-25 11:08
#73557 #73557
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mein Code funktioniert an sich:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
use strict;
use warnings;

$_ = 'test';

routine1('hallo','welt');

sub routine1
{
my $daten1 = $_;
my @daten2 = @_;
print sprintf("date1: %s - daten2: %s\n",$daten1,join(" .. ",@daten2));

routine2($daten1,@daten2);
}

sub routine2
{
my ($test1,@test2) = @_;
print sprintf("test1: %s - test2: %s\n",$test1,join(" .. ",@test2));
}


Ausgabe:
Code: (dl )
1
2
3
~/entwicklung 9> perl params.pl 
date1: test - daten2: hallo .. welt
test1: test - test2: hallo .. welt


Du musst uns also schon zeigen was Du gemacht hast und was Fehlermeldungen waren...
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/
fraggs
 2007-01-25 12:18
#73558 #73558
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
hm k naja, das script von dem bastler der vor mir hier ar ist total unuebersichtlich. Frage: wenn my $daten1 = $_; in routine1 in einer "foreach" schleife steht sollte das doch immer noch gehen oder ?

gibts da was zum thema zum nachlesen ? ich durchsuche mal das internet
mmm twix
renee
 2007-01-25 12:21
#73559 #73559
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=fraggs,25.01.2007, 11:18][...] Frage: wenn my $daten1 = $_; in routine1 in einer "foreach" schleife steht sollte das doch immer noch gehen oder ?
[...][/quote]
Kannst Du das etwas genauer erklären? Ich weiß nicht so genau was Du wissen willst...

Wenn Du so etwas meinst:
Code: (dl )
1
2
3
4
foreach(@array){
my $daten1 = $_;
# weiterer Code
}


Dann bedeutet das, dass $daten1 nur in der Schleife gültig ist und bei jedem Schleifendurchlauf einen neuen Wert hat...
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/
fraggs
 2007-01-25 12:37
#73560 #73560
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl
use strict;
use warnings;

routine1('hallo','welt');

sub routine1
{
 my @daten2 = @_;
 my $daten1;
 foreach(@daten2)
    {
### macht eine query und bekommt dann $_ raus
        $daten1 = $_;
##hier macht er halt die auswertung und wenn a = a dann geht er zur routine2
                         routine2($daten1,@daten2);
            }
}

sub routine2
{
 my ($test1,@test2) = @_;
 print sprintf("test1: %s - test2: %s\n",$test1,join(" .. ",@test2));
}


so sieht routine1 bei mir immoment aus bereitet das konflikte ?

EDIT: jetzt ist es so wie es aussiet richtig\n\n

<!--EDIT|fraggs|1169722727-->
mmm twix
renee
 2007-01-25 12:52
#73561 #73561
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So hast Du 'test' nie in routine1... Du übergibst halt das aktuelle Element aus @daten2 and die routine2. Wenn es das ist was Du willst, dann ist das ok...

Du erläuterst aber zu wenig, was Du eigentlich willst. Wiki:So fragt man in einem Forum
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 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-01-24 13:53.