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.
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!
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
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:
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:
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:
Und in Perl beispielsweise:
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 ü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";
}
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) {
...
}
Code: Alles auswählen
sub blah {
my ($param1, $param2) = @_;
...
}
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.:
Das ist cool.
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