📜  Perl – 函数和子程序之间的区别

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

Perl – 函数和子程序之间的区别

在 Perl 中,当代码脚本变得更大,即包含数百行代码时,管理这样的代码脚本变得困难。为了避免这个困难,Perl 为其用户提供了函数和子例程的概念。函数和子例程将复杂/大量代码分解为更小更简洁的部分,以使程序更具可读性。

它们允许我们重用之前在程序中编写的代码,从而减少了应用程序的大小和调试时间。 Perl 函数和子例程用于重用程序中的代码。我们可以在应用程序的多个位置使用具有不同参数的函数。

什么是函数?

函数是一个接受多个参数的东西,用它们做一些事情,然后返回一个值。它可以内置在编程语言中,也可以由用户提供。

在 Perl 中,当我们定义一个函数时,我们指定了语句的名称和顺序。稍后,当我们想要执行计算时,我们可以按名称“调用”函数,该函数将运行函数定义中包含的语句序列。
Perl 中有许多内置函数,它们也非常方便。例如,“say”是一个内置函数。 Perl 甚至允许我们构建自己的函数,它可以帮助我们执行我们想做的任务。

什么是子程序?

子例程(或子程序)使我们能够为代码部分命名,以便当我们想在程序中再次使用它时,只需调用它的名称即可使用它。

子程序以两种主要方式帮助我们在 Perl 中进行编程:

  • 首先,它们让我们在程序中再次重用代码,从而更容易找到和修复错误,从而更快地编写程序。
  • 其次,它们允许我们将代码分成组织部分。每个子程序负责一个特定的任务。

在 Perl 中,将一段代码放入子程序有两种情况:

  • 当我们知道代码将用于计算或操作不止一次时。例如,将强数据放入特定格式或将传入数据记录转换为哈希等。
  • 当我们的程序存在逻辑单元时,我们希望将其分解为多个部分,从而使我们的程序更易于理解。

下面是函数和子例程之间的区别表:

FUNCTIONSUBROUTINE

The basic format of a function is :

$myvalue = myfunction(parameter, parameter);

The basic format of subroutine is :

sub subroutine_name

{

   # body of subroutine

}

A function in Perl means something built into Perl. The main reference documentation for Perl built-ins is called perlfunc.A subroutine in Perl is a section of code that can take arguments, perform some operations with them, and may return a meaningful value, but don’t have to. However, they’re always user defined rather than built-ins.
Function are provided to us by Perl.Subroutines are chunks of code that we provide to Perl.
Functions are similar to subroutines, except that they return a value. 
A function commonly carries out some calculations and reports the result to the caller.
 Subroutines perform a task but do not report anything to the calling program.
A function cannot change the value of the actual arguments .A subroutine can change the value of the actual argument.
A function has deterministic output and no side effects.
 
A subroutine doesn’t have any such restrictions.

使用函数和子例程反转字符串的示例程序:

Function
#!/usr/bin/perl
# Perl program to reverse a string
# using pre-defined function
  
# Creating a string
$string = "GeeksForGeeks"; 
print "Original string: $string", "\n";
print "Reversed string: "; 
  
# Calling pre-defined function
print scalar reverse("$string"), "\n";


Subroutine
#!/usr/bin/perl
# Perl program to reverse a string
# using a subroutine
  
# Creating a string
my $string = 'GeeksforGeeks';
  
print 'Original string: ', $string, "\n";
print 'Reversed using Subroutine: ', 
    reverse_in_place($string), "\n";
  
# Creating a subroutine
sub reverse_in_place
{
    my ($string) = @_;
    my @array = split //, $string;
    my $n = scalar @array;
  
    for (0 .. $n / 2 - 1)
    {
        my $tmp    = $array[$_];
        $array[$_] = $array[$n - $_ - 1];
        $array[$n - $_ - 1] = $tmp;
    }
    return join('', @array);
}


输出:
Original string: GeeksforGeeks
Reversed using Subroutine:  skeeGrofskeeG