Schrift
[thread]8098[/thread]

methoden mit und ohne &?



<< >> 8 Einträge, 1 Seite
susi
 2006-06-21 17:02
#67512 #67512
User since
2006-06-21
1 Artikel
BenutzerIn
[default_avatar]
ich wollte mal fragen, ob mir jemand sagen kann, was der unterschied zwischen methoden mit und ohne & ist?
Taulmarill
 2006-06-21 17:19
#67513 #67513
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
eine subroutine kann mit oder ohne '&' aufgerufen werden, dies macht vom aufruf her keinen unterschied. in seltenen fällen kann es aber vorkommen, dass perl nicht erkennt, dass es sich bei einem subroutinenaufruf um einen solchen handelt, in diesen fällen kann mit einem vorgestellten '&' der aufruf eindeutig als solcher gekennzeichnet werden. siehe auch perlsub
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
docsnyder
 2006-06-21 17:28
#67514 #67514
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hab' mal ein Beispiel generiert, um das mit dem "Deutlichmachen" ein bisschen zu veranschaulichen:

Code: (dl )
1
2
3
4
5
6
7
8
9
sub getFunc {
 return("func" . "Name");
}

sub funcName {
 printf("EXECUTING FUNCTION !\n");
}

&{getFunc()}();


Gruß, Doc
renee
 2006-06-21 17:47
#67515 #67515
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Am größten ist der Unterschied bei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use strict;
use warnings;

my $counter = 1;

sub test{
print "Lauf: $counter @_\n";
}

@_ = qw~1 2 3~;

&test;
++$counter;
test;


Ausgabe:
Code: (dl )
1
2
Lauf: 1 1 2 3
Lauf: 2


Wenn man die Klammern weglässt und mit & aufruft, dann wird @_ als Parameterliste übergeben...
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/
Dubu
 2006-06-21 20:02
#67516 #67516
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
* Wie renee schon sagte: Mit &, ohne Klammern, wird automatisch das aktuelle gültige Parameterarray @_ wieder als Parameter übergeben. Selten, dass man das absichtlich macht.

* docsnyders Beispiel ist evil, weil es symbolische Referenzen benutzt und unter "use strict" kracht.
Aber in einem stimmt's: Wenn Name oder Referenz einer Subroutine gebraucht wird, muss das "&" davor stehen.
(Bsp.: $mysubref = \&mysub;).

* Mit "&" werden Prototypen ignoriert. Wenn man Prototypen nutzt, darf man also kein "&" vor den Aufruf setzen.

* Mit "funktionsname()" ist man immer auf der sicheren Seite, ob mit oder ohne Prototypen.

* Historisch gab es zuerst nur die Form mit "&". Weil es so gut zu den anderen Sigils passt ("$" für Skalare, "@" für Arrays etc.) und selbstdefinierte Funktionen von den eingebauten Perl-Funktionen unterscheidet, benutzen viele immer noch die Form mit dem "&" davor. (Gell, strat? ;))
Strat
 2006-06-21 20:59
#67517 #67517
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@dubu: genau; wobei ich seit ein paar Jahren die &-Form nur noch fuer Subroutinen verwende, die ich selbst gecoded habe, nicht mehr fuer fremde. Das hat den optischen Vorteil, dass ich auf den ersten Blick zwischen fremden Subs, die ich importiert habe, und eigenen unterscheiden kann.

&Sub ohne () verwende ich gar nicht; wenn ich das haben will, schreibe ich da explizit &Sub(@_) oder so aehnlich... (siehe auch meine "Einfuehrung in Perl")
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
lichtkind
 2006-06-21 22:35
#67518 #67518
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
wird eh auhc abgeschafft in perl6 liefert & referenz auf eine sub und unterbindet ausführung
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Strat
 2006-06-22 16:13
#67519 #67519
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@lichtkind: darueber mache ich mir dann gedanken, wenn perl6 kommt.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-06-21 17:02.