Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.

PQ Discord Server: #planetquake                                                                                                                                         Spenden? Hier entlang!

[perl] var => sub übergeben

Forum für alles rund ums Coden und web.design - HTML, XHTML, XML, CSS, PHP, ASP, Zugriffsrechten, Mods uvm.
Antworten
csm

[perl] var => sub übergeben

Beitrag von csm »

hüüüülfe ;) ich verstehe die doku einfach nicht.

ich habe im sub "apache" eine variable:

my $httpdconf;

und das, was da drin steht, würde ich gerne im sub "vhost" auslesen.

bekomme ich nicht hin :/ @_ $_ << k.a. Bild
palandir

Beitrag von palandir »

Hm?
Also Variablen die du mit "my" deklarierst sind lokal zu ihrem entsprechenden Block. Wenn du eine Funktion hast sub func { my $a = 1; } dann existiert $a außerhalb dieser Funktion nicht. Wenn du auf eine Variable aus mehreren Funktionen zugreifen willst, dann schreibst du sie z.B. außerhalb hin:

Code: Alles auswählen

my $httpdconf;

sub func1 {
    $httpdconf = '/etc/apache/httpd.conf';
    print "$httpdconf\n";
}

sub func2 {
    print "$httpdconf\n";
}
Oder du benutzt "echte" globale Variablen (our $FOO = 1;), aber sollte man nur nehmen wenn unbedingt nötig, und das ist fast nie.

Oder du übergibst die Variable der entsprechenden Funktion:

Code: Alles auswählen

sub func1 {
    my $httpdconf = 'ich bin nur für func1 lesbar';
    func2($httpdconf);
}

sub func2 {
    # Macht alles fast das gleiche:
    my $httpdconf = shift;    # aus Array @_ erstes Element entfernen (ist dann nur noch in $httpdconf vorhanden!)
    #my $httpdconf = $_[0]     # erstes Element von Array @_ kopieren
    #my ($httpdconf) = @_;     # Im Listenkontext erstes Element von Array @_ kopieren

    print "$httpdconf\n";
}
Oder du machst es objektorientiert. ;)


Noch zur Erklärung: @_ ist das Array welches die Funktionsparameter enthält. Der Vorteil ist eben, dass eine Funktion dadurch beliebig viele Parameter erhalten kann.

In anderen Programmiersprachen macht man:

Code: Alles auswählen

function blah(param1, param2) {
    ...
}
Und in Perl beispielsweise:

Code: Alles auswählen

sub blah {
    my ($param1, $param2) = @_;

    ...
}
palandir

Beitrag von palandir »

Achja, und verwechsle nicht bspw. $_[0] mit $_ ;)
Das erste ist einfach das erste Element vom Array @_, das zweite ist die Perl-"Defaultvariable". Viele Funktionen greifen auf $_ zurück, wenn keine Variable übergeben wurde.

Z.B.:

Code: Alles auswählen

$_ = 'test';
print if length;   # print($_) if length($_);  --> gibt $_ aus, wenn es Zeichen enthält
Das ist cool. ;)
csm

Beitrag von csm »

Juar, hab's jetzt eh schon hinbekommen - muss mich trotzdem noch näher damit befassen - Vielen Dank jedenfalls :) @_ und $_ hätte ich schon nicht verwechselt ;)
Antworten