📜  珀尔 |多个子程序

📅  最后修改于: 2022-05-13 01:54:43.500000             🧑  作者: Mango

珀尔 |多个子程序

先决条件:Perl |子程序或函数

Perl函数或子例程是一组共同执行特定任务的语句。在每种编程语言中,用户都希望重用代码。因此用户将这段代码放在函数或子程序中,这样就不需要一次又一次地编写代码。
在 Perl 中,术语函数、子例程和方法是相同的,但在某些编程语言中,它们被认为是不同的。在 Perl 编程中,subroutines 这个词用得最多,因为它是使用关键字 sub 创建的。每当调用该函数时,Perl 就会停止执行其所有程序并跳转到该函数以执行它,然后返回到它之前运行的代码部分。可以避免使用 return 语句。

定义子程序:

在 Perl 中定义子程序的一般形式如下:

sub subroutine_name
{
    # body of method or subroutine
}

在 Perl 中,一个程序可以保存多个具有相同名称的子例程而不会产生错误,因为 Perl 允许编写多个具有相同名称的子例程,除非它们具有不同的签名。这可以通过对具有相同名称的每个子例程使用不同的数量来定义。

子例程的 Arity: Perl 子例程可以具有相同的名称,除非它们具有不同的 Arity 集。 Arity 是指子例程包含的参数的数量。这些参数可能是也可能不是不同的数据类型。只要子程序的数量不同,Perl 程序就不会产生任何错误。

使用'multi'关键字:
Perl 中的多个子程序可以通过使用关键字'multi'来创建。这有助于创建具有相同名称的多个子例程。

例子:

multi Func1($var){statement};
multi Func1($var1, $var2){statement1; statement2;}

在创建内置函数和大多数编程语言(如 Perl)中的运算符时,使用多个子例程非常常见。这有助于通过不为每个其他子例程使用不同的名称来降低程序的复杂性。无论需要什么代码语句,只需传递该函数所需的参数数量即可完成工作。在这种情况下,编译器将选择函数签名与调用执行的子程序相匹配的子程序版本。

诸如数字的阶乘、斐波那契数列等各种程序需要多个函数来解决问题。使用多个子程序将有助于降低此类程序的复杂性。

示例 1:斐波那契数列之和。

#!/usr/bin/perl
# Program to print sum of fibonacci series
  
# Function for $n = 0
multi Fibonacci_func(0)
{
    1; # returning 1
}
  
# Function for $n = 1
multi Fibonacci_func(1)
{
    1; # returning 1
}
  
# Recursive function to calculate Sum
multi Fibonacci_func(Int $n where $n > 1)
{
    Fibonacci_func($n - 2) + 
    Fibonacci_func($n - 1);
}
  
# Printing the sum 
# using Function Call
print Fibonacci_func(17);

输出:

2584

上面的示例使用多个子程序来计算斐波那契数列之和。示例 2:数字的阶乘

#!/usr/bin/perl
# Program to print factorial of a number
  
# Factorial of 0
multi Factorial(0)
{
    1; # returning 1
}
  
# Recursive Function 
# to calculate Factorial
multi Factorial(Int $n where $n > 0)
{
    $n * Factorial($n - 1); # Recursive Call
}
  
# Printing the result 
# using Function Call
print Factorial(15);

输出:

3628800

在上面给出的示例中,程序使用'multi'关键字来声明多个具有相同名称但具有不同arity 的子例程。