Thread @_? (14 answers)
Opened by Mathias at 2006-05-29 21:17

bloonix
 2006-05-30 03:48
#66705 #66705
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pktm,29.05.2006, 23:22]Wo liegt denn der Unterschied?[/quote]
Wenn man es genauer betrachtet gibt es keinen Unterschied, denn beides
wird mittels sub{} deklariert. Allerdings gibt es Unterschiede, wenn
man die Funktionen ansprechen möchte, denn echte Methoden müssen
anders angesprochen werden, denn als erstes Argument wird der
Packetname erwartet.

Beispiel
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
use strict;
use warnings;

package TestModul;

use strict;
use warnings;
use Data::Dumper;

sub method1 { print "$_\n" for @_ }
sub method2 { print "$_\n" for @_ }
sub method3 { my @arr = @_; return bless \@arr, shift; }
sub method4 { print Dumper(\@_) }

1;

use TestModul;

# Jemand, der versucht, ueber ein Objekt eine Methode anzusprechen,
# wuerde ein "die" ausloesen - aus diesem Grund verwende ich hier ein
# eval{}, damit das Skript nicht abbricht.
eval {
  my $obj = method1 TestModul(1);
  $obj->method2(1);
} or warn $!;

# Hier bricht das Skript nicht ab, da method3() den Packetnamen
# an $obj zurueckliefert.
my $obj = method3 TestModul(1);
$obj->method4(1);


Ausgabe:
TestModul
1
Can't call method "method2" without a package or object reference at ./test.pl line 26.
       ...caught at ./test.pl line 24.

$VAR1 = [
         bless( [
                  'TestModul',
                  1
                ], 'TestModul' ),
         1
       ];



Das sind Feinheiten, auf die man reinfallen kann, deshalb behaupte ich
jetzt einfach mal, dass pq sehr richtig liegt.\n\n

<!--EDIT|opi|1148947236-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread @_?