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 (1..5){ 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