Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11443[/thread]

Kleine Verständigungsfrage Referenz auf Module



<< >> 5 Einträge, 1 Seite
Gast Gast
 2008-03-10 09:34
#106869 #106869
Hallo Community,

habe eine kurze Versändigungsfrage, ob es Sinn macht Referenzen auf Module als Parameter an Funktionen zu definierten bzw. zu übergeben.

Meine Vermutung ist, dass wenn ich eine Variable an eine Sub übergeben, dann das Gesamte Modul "kopiert" wird.

Kleiner Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
# Modul1.pm
package Porjekt::Modul1;

use strict;

sub new
{
my($package) = @_;
my $this = bless({Var1 => 1, Var2 => 2}, $package);
return $this;
}

1;


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
# Main.pl
#!/usr/bin/perl -w

use strict;

use Projekt::Modul1;

my $mod1 = Projekt::Modul1->new;

sub TuWas
{
my($modul) = @_;
}


Nun die Frage, wie ich die sub TuWas aufrufen soll. Entweder:
Code: (dl )
TuWas($mod1);

Oder:
Code: (dl )
TuWas(\$mod1);


In meinem Projekt habe ich Module wo etwas mehr Variablen enthalten sind.

Hoffe meine Frage war versändlich ;)

Vielen Dank!

Alex
renee
 2008-03-10 09:50
#106870 #106870
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nimm die erste Variante... (TuWas($mod1))

Allerdings übergibst Du da keine Referenzen auf ein Modul, sondern Du übergibst ein Objekt...
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/
Gast Gast
 2008-03-10 10:00
#106871 #106871
Hallo Renee,

danke erst mal für die schnelle Antwort!

Objekt ist mir schon klar.

Aber, was ich meine ist, was geschieht intern, wenn ich ein Objekt an eine Funktion übergebe. Ist es auch so, wie z. Bsp. bei VB? Es gibt zwei Möglichkeiten «ByVal» und «ByRef». Im ersten Fall wird komplettes Objekt im Stack kopiert im Zweiten wird nur die Speicher-Adresse übergeben. In C/C++ ist es auch so, dass man mit Referenzen oder Zeigern arbeiten muss. Wegen Performance zu mindest. Daher meine Frage.

Alex
renee
 2008-03-10 10:11
#106872 #106872
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In Perl wird Standardmäßig "Call by Reference" verwendet.

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

my $string = "Hallo";
TuWas($string);
print $string,"\n";

sub TuWas{
    $_[0] = "Perl-Community.de";
}


Ausgabe:Perl-Community.de

Normalerweise kopiert man dann aber die Daten:
Code (perl): (dl )
1
2
3
4
5
6
7
8
my $string = "Hallo";
TuWas($string);
print $string,"\n";

sub TuWas{
    my ($string2) = @_;
    $string2 = "Perl-Community.de";
}


Ausgabe:Hallo

Ein Objekt ist ja aber sowieso schon eine Referenz (in Deinem Fall eine Hashreferenz)...
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/
Gast Gast
 2008-03-10 10:15
#106873 #106873
Ok. Alles klar. Vielen Dank!

Alex
<< >> 5 Einträge, 1 Seite



View all threads created 2008-03-10 09:34.