User since
2003-08-04
7321
Artikel
ModeratorIn
Hi...
würdet ihr nun $obj als ref an eine sub üder geben, also
function1(\$obj);
function2($obj);
sub function1
{
my ($objref) = @_;
}
sub function2
{
my ($obj) = @_;
}
in function1 muss ich ja aber auch wieder dereferenzieren, um damit arbeiten zu können...
User since
2003-08-04
5872
Artikel
ModeratorIn
Nein, bei oo-Objekten kopiert man die Referenzen einfach, weil einen nicht die Adresse der Referenz interessiert, sondern die Adresse dessen, auf das die Referenz verweist. Und genau diese Adresse ist der "Inhalt" Deiner Referenz, den Du kopierst.
Also Variante 2.
Oder als Methode, falls das, was Du mit dem Objekt machen möchtest thematisch zur Klasse gehört.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-04
7321
Artikel
ModeratorIn
okay...
ich benutz eh immer variante 2...
gerade kam mir aber der gedanke und ich dachte, ich frag mal!
User since
2003-08-14
2022
Artikel
BenutzerIn
Darauf hätte ich jetzt auch getippt, weil in Perl Objekte ja "gesegnete" Referenzen sind. Wozu also eine Referenz auf eine Referenz?!
User since
2003-11-28
3645
Artikel
ModeratorIn
[quote=Ronnie,18.Feb..2004, 15:18]Darauf hätte ich jetzt auch getippt, weil in Perl Objekte ja "gesegnete" Referenzen sind. Wozu also eine Referenz auf eine Referenz?![/quote]
In Ausnahmefaellen vielleicht sinnvoll. Zum Beispiel, um ein Objekt in einer Funktion ersetzen zu koennen:
$bla = bless {}, "Bla";
sub austauschen {
my $objref = shift;
$$objref = bless {}, "Foo";
}
austauschen(\$bla);
use Data::Dumper;
warn Dumper($bla);
User since
2003-08-04
7321
Artikel
ModeratorIn
@ptk: der Umgang mit Pointern (Referenzen) ist mir wohl bekannt :P
aber guter Zusatz!
User since
2003-08-04
5872
Artikel
ModeratorIn
@ptk in dem Fall kannst Du aber auch auf $_[0] zugreifen ...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-11-28
3645
Artikel
ModeratorIn
$_[0] verwenden kann man grundsaetzlich immer, auch bei normalen Skalaren. Dadurch verliert man aber den Dokumentationscharakter eines \...-Aufruf, naemlich kann man sehen, dass sich das Argument aendern kann. Ansonsten muss man das im Pod dokumentieren.
User since
2003-08-04
5872
Artikel
ModeratorIn
Stimmt. Insofern ist Deine Variante schöner.
Das ist auch ein Grund, warum ich in C++-Programmen manchmal lieber Zeiger als Referenzen übergebe, weil dann beim Lesen des Funktions
aufrufs schon klar ist, dass der Inhalt dessen, auf das gezeigt wird, ev. geändert werden könnte.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=Crian,19.02.2004, 14:51]Stimmt. Insofern ist Deine Variante schöner.
Das ist auch ein Grund, warum ich in C++-Programmen manchmal lieber Zeiger als Referenzen übergebe, weil dann beim Lesen des Funktionsaufrufs schon klar ist, dass der Inhalt dessen, auf das gezeigt wird, ev. geändert werden könnte.[/quote]
hmmm...
der wert des pointers kann nur dann geändert werden, wenn er nicht const ist...
const int* ist im Grunde das selbe wie cont int & bzw. int* <=> int &
in Wirklichkeit biegt das der Compiler auch nur um... in Assembler ist beides das selbe... dies sieht man dann, wenn man sich mal das Assembly anschaut