Pré-requisito: Perl | Sub-rotinas ou funções

Uma função ou sub-rotina Perl é um grupo de instruções que, juntas, executam uma tarefa específica. Em cada linguagem de programação o usuário deseja reutilizar o código. Assim, o usuário coloca a seção de código em função ou sub-rotina para que não haja necessidade de escrever código repetidamente.
Em Perl, os termos função, sub-rotina e método são os mesmos, mas em algumas linguagens de programação, eles são considerados diferentes. As sub-rotinas de palavras são mais usadas na programação Perl porque são criadas usando a palavra-chave sub. Sempre que há uma chamada para a função, Perl para de executar todo o seu programa e salta para a função para executá-la e então retorna para a seção do código que estava executando anteriormente. Pode-se evitar o uso da instrução return.

Definindo sub-rotinas:

A forma geral de definir a sub-rotina em Perl é a seguinte-

sub subroutine_name
{
    # body of method or subroutine
}

Em Perl, um programa pode conter várias sub-rotinas com o mesmo nome sem gerar um erro, porque Perl permite escrever várias sub-rotinas com o mesmo nome, a menos que tenham assinaturas diferentes . Isso pode ser definido usando aridades diferentes para cada sub-rotina com o mesmo nome.

Arity de uma sub- rotina : as sub-rotinas Perl podem ter o mesmo nome, a menos que tenham um conjunto diferente de Arity. Arity se refere ao número de argumentos que uma sub-rotina contém. Esses argumentos podem ou não ser de tipos de dados diferentes. Enquanto a aridade das sub-rotinas for diferente, o programa Perl não gerará nenhum erro.

Uso da palavra-chave 'multi':
Múltiplas sub-rotinas em Perl podem ser criadas usando a palavra-chave 'multi'. Isso ajuda na criação de várias sub-rotinas com o mesmo nome.

Exemplo:

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

O uso de múltiplas sub-rotinas é muito comum na criação de funções embutidas e a maioria dos operadores em uma linguagem de programação como Perl. Isso ajuda a reduzir a complexidade do programa, não usando nomes diferentes para todas as outras sub-rotinas. Qualquer que seja a instrução de código necessária, basta passar o número de argumentos necessários para aquela função e o trabalho estará feito. Nesse caso, o compilador escolherá a versão da sub-rotina cuja assinatura da Função corresponda à chamada para execução.

Vários programas como fatorial de um número, série de Fibonacci, etc. requerem mais de uma função para resolver o problema. O uso de múltiplas sub-rotinas ajudará a reduzir a complexidade de tais programas.

Exemplo 1: Soma das séries de Fibonacci.

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

Saída:

2584

O exemplo acima usa várias sub - rotinas para calcular a Soma das Séries de Fibonacci.
 
Exemplo 2: fatorial de um número

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

Saída:

3628800

Nos exemplos fornecidos acima, o programa usa a palavra-chave 'multi' para declarar várias sub-rotinas com o mesmo nome, mas com aridade diferente.