Latest web development tutorials

Perlfunktionen (Funktion)

Perlfunktionen, die benutzerdefinierte Funktion ist.

Perlfunktionen, die ein Stück Code ist an spezielle Aufgaben Trennung durchführen, kann es machen Vervielfältigung des Codes zu reduzieren und das Programm leicht zu lesen ist.

Perlfunktionen kann überall im Programm angezeigt werden, ist die Syntax wie folgt:

sub subroutine{
   statements;
}

Unterprogrammaufruf Syntax:

subroutine( 参数列表 );

Perl 5.0 in den folgenden Versionen Aufruf Unterprogramm wie folgt:

&subroutine( 参数列表 );

In der neuen Version, obwohl es unterstützt die Call-Methode, aber nicht zu empfehlen.

Als nächstes schauen wir uns ein einfaches Beispiel ist:

#!/usr/bin/perl

# 函数定义
sub Hello{
   print "Hello, World!\n";
}

# 函数调用
Hello();

Das obige Programm, das Ausgabe ist:

Hello, World!

Parameter an Subroutinen

Perlfunktionen können mehrere Parameter und andere Programmierung, verwenden Sie die speziellen Array @_ Unterprogramm Parameter angegeben akzeptieren.

Somit ist das Unterprogramm erste Argument $ _ [0], das zweite Argument $ _ [1] ist, und so weiter.

Ob Parameter Skalar oder Array-Typ sind, der Benutzer des Parameter an das Unterprogramm übergeben, mit dem Bezugs perl Standard sie nennen.

#!/usr/bin/perl

# 定义求平均值函数
sub Average{
   # 获取所有传入的参数
   $n = scalar(@_);
   $sum = 0;

   foreach $item (@_){
      $sum += $item;
   }
   $average = $sum / $n;
   print '传入的参数为 : ',"@_\n";           # 打印整个数组
   print "第一个参数值为 : $_[0]\n";         # 打印第一个参数
   print "传入参数的平均值为 : $average\n";  # 打印平均值
}

# 调用函数
Average(10, 20, 30);

Das obige Programm, das Ausgabe ist:

传入的参数为 : 10 20 30
第一个参数值为 : 10
传入参数的平均值为 : 20

Der Benutzer kann den Wert der entsprechenden aktuellen Parameter zu ändern, indem die Werte in dem Array zu ändern @_.

Wird an der Unterprogramm-Liste

Da @_ Variable ein Array ist, so kann er die Liste an das Unterprogramm übergeben.

Aber wenn wir eine skalare und Array-Parameter übergeben müssen, müssen Sie sich auf den letzten Parameter aufzulisten, wie folgt:

#!/usr/bin/perl

# 定义函数
sub PrintList{
   my @list = @_;
   print "列表为 : @list\n";
}
$a = 10;
@b = (1, 2, 3, 4);

# 列表参数
PrintList($a, @b);

Das obige Programm wird das skalare und eine Reihe von Ausgabeergebnisse zusammen:

列表为 : 10 1 2 3 4

Wir können Unterprogramme mehrere Arrays und Hashes passieren, aber wenn es mehrere Arrays und Hashes übergeben wird, wird auf den Verlust einer unabhängigen Identität führen. Also müssen wir die Referenz zu verwenden (der nächste Abschnitt einführen) zu übergeben.

Hash zu einem Unterprogramm übergeben

Wenn die Hash-Tabelle an das Unterprogramm übergeben wird, wird es kopiert werden in der Hash-Tabelle zu @_ wird die Liste der Schlüssel / Wert-Paaren zu erweitern sein.

#!/usr/bin/perl

# 方法定义
sub PrintHash{
   my (%hash) = @_;

   foreach my $key ( keys %hash ){
      my $value = $hash{$key};
      print "$key : $value\n";
   }
}
%hash = ('name' => 'w3big', 'age' => 3);

# 传递哈希
PrintHash(%hash);

Die obige Programmausführung Ausgabe ist:

age : 3
name : w3big

Unterprogramm-Rückgabewert

Ein Unterprogramm kann sein wie andere Programmiersprachen der return-Anweisung verwenden, um Werte zurückzukehren.

Wenn keine return-Anweisung, dann die letzte Zeile des Unterprogramms Anweisung als Rückgabewert.

#!/usr/bin/perl

# 方法定义
sub add_a_b{
   # 不使用 return
   $_[0]+$_[1];  

   # 使用 return
   # return $_[0]+$_[1];  
}
print add_a_b(1, 2)

Die obige Programmausführung Ausgabe ist:

3

Unterprogramm können wir Skalare, Arrays und Hashes zurück, aber im Gegenzug mehrere Arrays und Hashes, führt zum Verlust einer unabhängigen Identität führen. Also müssen wir die Referenz zu verwenden (der nächste Abschnitt einführen) mehrere Arrays zurückzukehren und Funktionen.


Unterprogramm private Variablen

In der Standardeinstellung Perl sind alle Variablen globale Variablen, was bedeutet, dass die Variable kann von überall im Programm aufgerufen werden.

Wenn wir private Variablen einstellen müssen, verwenden Siemeine Bediener einzustellen.

mein Operator erzeugt lexikalisch Variablen scoped, Variablen mit meinemÜberleben in der Anfang der Anweisung bis zum Ende des Schließbereich erstellt.

Scope bezieht sich auf die Schließung sein kann, in der Region Paar klammern kann eine Datei sein, kann auch ein, wenn sein, während, for, foreach, eval String.

Das folgende Beispiel zeigt, wie eine oder mehrere private Variablen zu deklarieren:

sub somefunc {
   my $variable; # $variable 在方法 somefunc() 外不可见
   my ($another, @an_array, %a_hash); #  同时声明多个变量
}
#!/usr/bin/perl

# 全局变量
$string = "Hello, World!";

# 函数定义
sub PrintHello{
   # PrintHello 函数的私有变量
   my $string;
   $string = "Hello, w3big!";
   print "函数内字符串:$string\n";
}
# 调用函数
PrintHello();
print "函数外字符串:$string\n";

Die obige Programmausführung Ausgabe ist:

函数内字符串:Hello, w3big!
函数外字符串:Hello, World!

Temporäre Zuordnung Variablen

Wir können die lokale temporäre Werte für globale Variablen verwenden, wobei der Umfang des ursprünglichen Wertes nach der Ausfahrt ist auch zurück.

lokale Variablen im Hauptprogramm definiert nicht vorhanden ist, jedoch gibt es in dem Unterprogramm und das Unterprogramm Unterprogrammaufruf. Wenn Sie definieren können sie einen Wert geben, wie zum Beispiel:

#!/usr/bin/perl

# 全局变量
$string = "Hello, World!";

sub Printw3big{
   # PrintHello 函数私有变量
   local $string;
   $string = "Hello, w3big!";
   # 子程序调用的子程序
   PrintMe();
   print "Printw3big 函数内字符串值:$string\n";
}
sub PrintMe{
   print "PrintMe 函数内字符串值:$string\n";
}

sub PrintHello{
   print "PrintHello 函数内字符串值:$string\n";
}

# 函数调用
Printw3big();
PrintHello();
print "函数外部字符串值:$string\n";

Die obige Programmausführung Ausgabe ist:

PrintMe 函数内字符串值:Hello, w3big!
Printw3big 函数内字符串值:Hello, w3big!
PrintHello 函数内字符串值:Hello, World!
函数外部字符串值:Hello, World!

Statische Variablen

Zustand Operatoren Funktion ähnelt C des statischen Modifikator, Zustand Schlüsselwörter persistent lokale Variablen werden wird.

Zustand auch lexikalische Variablen, nur die Definition der lexikalische Variable Domäne gültig ist, zum Beispiel:

#!/usr/bin/perl

use feature 'state';

sub PrintCount{
   state $count = 0; # 初始化变量

   print "counter 值为:$count\n";
   $count++;
}

for (1..5){
   PrintCount();
}

Die obige Programmausführung Ausgabe ist:

counter 值为:0
counter 值为:1
counter 值为:2
counter 值为:3
counter 值为:4

Anmerkung 1: Zustand nur eine geschlossene scoped Variablen innerhalb des Unterprogramms erstellen können.

Anmerkung 2: Zustand von Perl 5.9.4 eingeführt wird, muss hinzugefügt werden, vor dem Gebrauch zu verwenden.

Anmerkung 3: Zustand Skalar erklären kann, Array, Hash. Aber wenn Arrays und Hashes zu erklären, man kann es nicht initialisiert werden (zumindest Perl 5.14 wird nicht unterstützt).


Unterprogrammaufruf Kontext

Subroutinenaufrufe, es auf die Werte verschiedener Typen zurück, abhängig vom Kontext, wie die folgenden Localtime () Unterprogramm im skalaren Kontext liefert die Zeichenfolge im Listenkontext eine Liste zurückgibt:

#!/usr/bin/perl

# 标量上下文
my $datestring = localtime( time );
print $datestring;

print "\n";

# 列表上下文
($sec,$min,$hour,$mday,$mon, $year,$wday,$yday,$isdst) = localtime(time);
printf("%d-%d-%d %d:%d:%d",$year+1990,$mon+1,$mday,$hour,$min,$sec);

print "\n";

Die obige Programmausführung Ausgabe ist:

Sun Jun 12 15:58:09 2016
2106-6-12 15:58:9