Perl 函数签名

Perl 函数签名

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

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

sub subroutine_name
{
    # body of method or subroutine
}

函数签名: 当一个函数被定义时,一组参数也被定义在括号内,以定义它在函数调用时将接收的参数类型。这个函数签名可以包含一个参数或一个参数列表。一个子程序或函数的签名被定义后,只能接收子程序中定义的参数类型。如果传递给子程序的参数与它的签名不同,它将产生一个错误。

一个函数签名可以说明很多关于子程序的类型。它使用户能够制造不同的同名子程序,但有不同的签名,即有不同的参数。在Perl中,不同的子程序名称可以相同,但其参数必须不同。

例子

sub example_func(variable)
{
    statement;
}

sub example_func(variable1, $variable2)
{
    statement;
}

在上面的例子中,子程序的名称是相同的,但它们的参数数不同,因此,它们不会被认为是不同的子程序,你的Perl代码也不会产生任何错误。

传递与签名类型不同的参数: 当一个函数被定义为签名时,该子程序必然会接受与签名类型相同的参数。如果传递了一个与函数签名不同的参数,那么将产生一个错误,从而导致代码的编译失败。

例子

#!/usr/bin/perl
  
# Defining Function Signature
sub example(Int variable)
{
    returnvariable / 2;
}
  
# Function Call
print example(44);

输出

22

如果我们传递的参数的类型不是函数签名,那么它将产生一个错误,如下图所示。

#!/usr/bin/perl
  
# Defining Function Signature
sub example(Int variable)
{
    returnvariable / 2;
}
  
# Function Call with 
# string type parameter
print example("44");

编译prog.pl时出错

调用example(Str)将永远不会与已声明的签名(Int $variable)一起工作

at prog.pl:7

参数数量的差异:

当一个函数签名被定义时,它也持有可以传递给它的参数数量,以及参数的类型。如果我们用不同的参数数来调用这个函数,就会导致一个错误,因为Perl对不同签名的函数有不同的含义。

例子

#!/usr/bin/perl
  
# Defining Function Signature
sub example(Int variable)
{
    returnvariable / 2;
}
  
# Function Call with 
# two arguments
print example(44, 29);

输出

Error while compiling prog.pl  
Calling example(Int, Int) will never work with declared signature (Int $variable)  
at prog.pl:10 

函数签名是一个有用的方面,但有时会让一些程序员感到非常烦恼,因为定义函数签名限制了该函数对特定类型参数的使用。如果定义的函数没有签名,那么对可以传递给它的参数类型就没有限制。

例子

#!/usr/bin/perl
  
# Defining Function Signature
sub example(variable)
{
    returnvariable / 2;
}
  
# Function Call with Integer argument
# written as a string type
print example("44");

输出

22

在上面的代码中,一个函数被声明为没有特定的参数类型,因此当一个整数值作为字符串传递给它时,它会自动将参数转换为整数形式并给出结果。但是,如果我们用一个字符串参数调用该函数,而要对其进行的操作需要一个整数值,那么它将导致一个错误,如下所示。

#!/usr/bin/perl
  
# Defining Function Signature
sub example(variable)
{
    returnvariable / 2;
}
  
# Function Call with 
# string type argument
print example("Geeks");

输出

Cannot convert string to number: base-10 number must begin with valid digits or ‘.’
in sub example at prog.pl line 4
in block at prog.pl line 11

Actually thrown at:
in sub example at prog.pl line 4
in block at prog.pl line 11

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程