Thread Perl - Sub Routinen Parameter. (33 answers)
Opened by Gast at 2004-04-13 21:22

Gast Gast
 2004-04-13 21:22
#81524 #81524
Hi!

Ich muß in Perl etwas Programmieren und hab in Perl so gut wie keine Erfahrung.
Ich habe mir als Klassenersatz Packete angelegt und bin etwas verwirrt:

Rufe ich eine sub innerhalb des Packetes auf erhalte ich meine Parameter ab $_[0]. Rufe ich aber die sub über ein Objekt (wenn man das so nennen darf) auf steht in $_[0] vermutlich sowas wie this.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package test; 
@EXPORT = qw(new,test,test2);
sub new
{
my $self = {};
$self->{"hallo"} = "";
bless $self;
return $self;

}

sub test
{
test2("Hallo Welt");
}

sub test2
{
print "0 : $_[0]\n";
print "1 : $_[1]\n";
}


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
package test;
@EXPORT = qw(new,test,test2);
sub new
{
my $self = {};
$self->{"hallo"} = "";
bless $self;
return $self;

}

sub test
{
test2("Hallo Welt");
}

sub test2
{
print "0 : $_[0]\n";
print "1 : $_[1]\n";
}


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package test; 
@EXPORT = qw(new,test,test2);
sub new
{
my $self = {};
$self->{"hallo"} = "";
bless $self;
return $self;

}

sub test
{
test2("Hallo Welt");
}

sub test2
{
print "0 : $_[0]\n";
print "1 : $_[1]\n";
}


Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl 

use test;

my $t = test::new;

$t->test();
$t->test2("GZGZ");


Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl 

use test;

my $t = test::new;

$t->test();
$t->test2("GZGZ");


Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl 

use test;

my $t = test::new;

$t->test();
$t->test2("GZGZ");


Ausgabe:

Code: (dl )
1
2
3
4
0 : Hallo Welt 
1 :
0 : test=HASH(0x804b248)
1 : GZGZ

Code: (dl )
1
2
3
4
0 : Hallo Welt 
1 :
0 : test=HASH(0x804b248)
1 : GZGZ

Code: (dl )
1
2
3
4
0 : Hallo Welt 
1 :
0 : test=HASH(0x804b248)
1 : GZGZ


Da es ja nun in Perl imho sowas wie private etc. nicht gibt kann eine Methode ja von "aussen" als auch von "innen" aufgerufen werden.
Wie handlet man da die o.g. Tatsache ? Die Parameter die man erwartet stehen ja also wo anderst.

Gibt es eine bessere / sinvollere Möglichkeit die Parameter zu übergeben ?
z.B. benannt ?

Code: (dl )
1
2
3
4
sub test($string) 
{
print $string;
}


Mir fehlen die Stichworte um bei Google was zu finden und das alte Perl Buch geht nicht mal auf packages ein.
Edit: Code tags eingefügt by format_c\n\n

<!--EDIT|format_c|1081880182-->

View full thread Perl - Sub Routinen Parameter.