Perl – 函数和子程序之间的区别
在 Perl 中,当代码脚本变得更大,即包含数百行代码时,管理这样的代码脚本变得困难。为了避免这个困难,Perl 为其用户提供了函数和子例程的概念。函数和子例程将复杂/大量代码分解为更小更简洁的部分,以使程序更具可读性。
它们允许我们重用之前在程序中编写的代码,从而减少了应用程序的大小和调试时间。 Perl 函数和子例程用于重用程序中的代码。我们可以在应用程序的多个位置使用具有不同参数的函数。
什么是函数?
函数是一个接受多个参数的东西,用它们做一些事情,然后返回一个值。它可以内置在编程语言中,也可以由用户提供。
在 Perl 中,当我们定义一个函数时,我们指定了语句的名称和顺序。稍后,当我们想要执行计算时,我们可以按名称“调用”函数,该函数将运行函数定义中包含的语句序列。
Perl 中有许多内置函数,它们也非常方便。例如,“say”是一个内置函数。 Perl 甚至允许我们构建自己的函数,它可以帮助我们执行我们想做的任务。
什么是子程序?
子例程(或子程序)使我们能够为代码部分命名,以便当我们想在程序中再次使用它时,只需调用它的名称即可使用它。
子程序以两种主要方式帮助我们在 Perl 中进行编程:
- 首先,它们让我们在程序中再次重用代码,从而更容易找到和修复错误,从而更快地编写程序。
- 其次,它们允许我们将代码分成组织部分。每个子程序负责一个特定的任务。
在 Perl 中,将一段代码放入子程序有两种情况:
- 当我们知道代码将用于计算或操作不止一次时。例如,将强数据放入特定格式或将传入数据记录转换为哈希等。
- 当我们的程序存在逻辑单元时,我们希望将其分解为多个部分,从而使我们的程序更易于理解。
下面是函数和子例程之间的区别表:
FUNCTION | SUBROUTINE |
---|---|
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