Najlepszy samouczek Perl podprogram (funkcja) W 2024 r. W tym samouczku możesz dowiedzieć się Przekazywanie parametrów do podprogramów,Hash przekazywane do podprogramu,Podprogram Wartość zwracana,Podprogramów zmienne prywatne,Tymczasowe zmienne przypisanie,zmienne statyczne,Podprogram kontekście połączenia,

Perl podprogram (funkcja)

Perl podprogram który jest funkcją zdefiniowaną przez użytkownika.

Perl podprogram który jest kawałek kodu do rozdzielenia zadań specjalnych, może to zrobić w celu zmniejszenia powielania kodu i zrobić program łatwy do odczytania.

Perl podprogram może pojawić się w dowolnym miejscu w programie, składnia jest następująca:

sub subroutine{
   statements;
}

Wywołanie podprogramu Składnia:

subroutine( 参数列表 );

Perl 5.0 w następujących wersjach wywołanie podprogramu w następujący sposób:

&subroutine( 参数列表 );

W nowej wersji, mimo że obsługuje metodę połączenia, ale nie jest zalecane.

Następnie spojrzeć na to prosty przypadek:

#!/usr/bin/perl

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

# 函数调用
Hello();

Powyższy program, wyjście jest:

Hello, World!

Przekazywanie parametrów do podprogramów

Perl podprogram może przyjąć wiele parametrów i inne programowania, za pomocą specjalnych tablic @_ podprogram wskazane.

Zatem podprogram pierwszy argument jest $ _ [0], drugi argument jest $ _ [1], i tak dalej.

Czy parametry są skalarne lub tablica typu, użytkownik parametru przekazanego do podprogramu, domyślnie Perl przez odniesienie do nich zadzwonić.

#!/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);

Powyższy program, wyjście jest:

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

Użytkownik może zmienić wartość odpowiednich rzeczywistych parametrów poprzez zmianę wartości w tablicy @_.

Przeszedł do listy podprogramu

Ponieważ zmienna @_ jest tablicą, więc można go przekazać listy do podprogramu.

Ale jeśli musimy zdać skalarne oraz tablicowe parametrów, trzeba wymienić na ostatni parametr w następujący sposób:

#!/usr/bin/perl

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

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

Powyższy program połączy skalarnych i tablicę wyników wyjściowych:

列表为 : 10 1 2 3 4

Możemy przejść do tablic i podprogramy wielu skrótów, ale jeśli to minęło wiele tablic i skrótów, doprowadzi do utraty niezależnej tożsamości. Więc musimy użyć odniesienia (następny rozdział wprowadzi) do przejścia.

Hash przekazywane do podprogramu

Gdy tabeli mieszania jest przekazywana do podprogramu, zostanie on skopiowany do @_ w tabeli mieszania będzie rozwinąć listę par klucz / wartość.

#!/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);

Wyjście powyżej wykonywanie programu jest:

age : 3
name : w3big

Podprogram Wartość zwracana

Podprogram może być jak inne języki programowania użyć instrukcji return do zwracania wartości.

Jeśli nie ma instrukcji return, to ostatnia linia pisma podprogramu jako wartość zwracana.

#!/usr/bin/perl

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

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

Wyjście powyżej wykonywanie programu jest:

3

Podprogram możemy wrócić skalary, tablice i hashe, ale w zamian za kilka tablice i hashe, doprowadzi do utraty niezależnej tożsamości. Więc musimy użyć odniesienia (następny rozdział wprowadzi), aby powrócić wiele tablic i funkcji.


Podprogramów zmienne prywatne

Domyślnie, Perl, wszystkie zmienne są zmiennymi globalnymi, co oznacza, że ​​zmienna może być wywołana z dowolnego miejsca w programie.

Jeżeli musimy ustawić zmienne prywatne, używaćmojego operatora.

mój operator tworzy leksykalnie zawężona zmienne, zmienne utworzone z moimmiejscu przeżycia na początku sprawozdania do końca zakresu zamknięcia.

Zakres odnosi się do zamknięcia może być w regionie szelki para może być plik, może być również w przypadku, gdy, na, foreach, eval ciąg.

Poniższy przykład pokazuje, w jaki sposób zadeklarować jedną lub więcej zmiennych prywatnych:

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";

Wyjście powyżej wykonywanie programu jest:

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

Tymczasowe zmienne przypisanie

Możemy korzystać z lokalnych tymczasowych wartości dla zmiennych globalnych, zakres pierwotnej wartości po wyjściu jest także powrotem.

zmienne lokalne zdefiniowane w programie głównym nie istnieje, ale istnieje w podprogramie i wywołanie podprogramu podprogramu. Po zdefiniowaniu może dać mu wartości, takich jak:

#!/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";

Wyjście powyżej wykonywanie programu jest:

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

zmienne statyczne

Funkcja podmioty państwowe jest podobna do statycznej modyfikatora C, w kluczowych państwowe staną się trwałe zmienne lokalne.

państwowe również zmienne leksykalne, tylko definicja leksykalnym domeny zmiennej jest poprawny, na przykład:

#!/usr/bin/perl

use feature 'state';

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

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

for (1pl5){
   PrintCount();
}

Wyjście powyżej wykonywanie programu jest:

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

Uwaga 1: państwo może tworzyć tylko zamkniętego scoped zmiennych wewnątrz podprogramu.

Uwaga 2: Stan jest sprowadzony z Perl 5.9.4, musi być dodany przed użyciem w użyciu.

Uwaga 3: państwo może oświadczyć, skalar, tablica hash. Ale podczas deklarowania tablic i skrótów, nie można go zainicjować (przynajmniej Perl 5.14 nie jest obsługiwany).


Podprogram kontekście połączenia

Podprogramy, powróci do wartości różnych typów, w zależności od kontekstu, takich jak poniższe localtime () podprogram w kontekście skalarnym zwraca ciąg w kontekście listowym zwraca listę:

#!/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";

Wyjście powyżej wykonywanie programu jest:

Sun Jun 12 15:58:09 2016
2106-6-12 15:58:9
Perl podprogram (funkcja)
10/30