Perl 子程式

什麼是子程式?

子程式與其他程式語言中的函式類似。我們已經使用了一些內建函式,如 printchompchop 等。我們可以在 Perl 中編寫自己的子程式。這些子程式可以寫在程式的任何地方,但最好將子程式放在程式碼的開頭或結尾。

子程式示例

sub subroutine_name 

{

    Statements;    # this is how typical subroutines look like.

}

我們知道如何編寫子程式,我們如何訪問它?

我們需要使用字首為 & 的子程式名來訪問或呼叫子程式。

sub display

{

    print "this is a subroutine";

}

display();    # This is how we call a subroutine

傳遞 Perl 引數和輸入引數

編寫子程式或 Perl 函式主要是編寫那些可重複使用程式碼。大多數可重用程式碼都需要將引數傳遞給子程式。在這裡,我們將學習如何將引數傳遞給子程式。

sub display

{       

    my $var=@_; # @_ is a special variable which stores the list of arguments passed.       

    print "$var is the value passed";       

}       

display(2,3,4);    #this is how we need to pass the arguments.

輸出:

3 is the value passed

@_ 是一個特殊的陣列變數,它儲存傳遞給子程式的引數。

Perl Shift

我們也可以使用’shift’關鍵字,它一次將一個引數移動到變數或 $_[0],$_[1]…,這是 @_ 陣列的單獨元素。

sub display

{       

my $var=shift;      

print "$var is passed";     

}       

display("hello");

輸出:

hello is passed

子程式通常用於物件導向的程式設計,也可用於可能有更多可重用程式碼的地方。

子程式的主要功能是執行一些任務並返回可重用程式碼的結果。

我們可以使用 return 關鍵字從子程式返回一個值。

sub add

{

my $a=shift;

my $b=shift;

return($a+$b);

}

my $result=add(5,6);

print $result;

輸出:

11

$result 將保有 $a$b 的值。

我們還可以將雜湊陣列和陣列直接傳遞給子程式。

sub hash

{

my %hash=@_;

print %hash;

}

%value= ( 1=>'a', 2=>'b');

&hash(%value);

輸出:

1a2b

我們還可以返回雜湊陣列或陣列。

sub hashArray

{

my %hash=@_;

print "Inside Sub-routine";

print %hash;

return(%hash);

}

%hash=(1=>'a', 2=>'b');

my(@ret)=hashArray(%hash);

print "After Sub-routine call";

print @ret;

輸出:

Inside Sub-routine2b1aAfter Sub-routine call2b1a