具有精确签名/精确参数数量的 Perl 子例程
Perl subroutines with exact signature / exact number of parameters
我在某个地方的子例程定义中看到了 $
的用法。为了进一步了解它,我用一个简单的子程序创建了各种案例,并且开始知道它用于定义具有精确签名的子程序。
谁能确认一下:
- 我说的对吗?我的意思是它是否用于此目的?
- 是否还有其他用途?
- 除了使用
my $param1 = shift;
或 my (@params) = @_
之外,还有其他方法可以在子程序中访问这些参数吗?
use strict;
use warnings;
# just a testing function
sub show($$){
print "Inside show";
}
show(1, 1); # works fine
show(1); # gives compilation error
# Not enough arguments for main::show at test.pl line 8, near "1)"
# Execution of test.pl aborted due to compilation errors.
show(1, 1, 1); # gives compilation error
# Too many arguments for main::show at test.pl line 8, near "1)"
# Execution of test.pl aborted due to compilation errors.
您正在使用 subroutine prototypes. Don't. For more detail, see Why are Perl 5's function prototypes bad?
5.20 中引入的一项新的实验性功能是 subroutine signatures。那些做你希望子程序原型可以做的一切。
例如:
use strict;
use warnings;
use feature 'signatures';
no warnings 'experimental::signatures';
sub show ( $canvas, $actor ) {
$actor->draw( $canvas, $COLOR{default});
}
等等
我在某个地方的子例程定义中看到了 $
的用法。为了进一步了解它,我用一个简单的子程序创建了各种案例,并且开始知道它用于定义具有精确签名的子程序。
谁能确认一下:
- 我说的对吗?我的意思是它是否用于此目的?
- 是否还有其他用途?
- 除了使用
my $param1 = shift;
或my (@params) = @_
之外,还有其他方法可以在子程序中访问这些参数吗?
use strict;
use warnings;
# just a testing function
sub show($$){
print "Inside show";
}
show(1, 1); # works fine
show(1); # gives compilation error
# Not enough arguments for main::show at test.pl line 8, near "1)"
# Execution of test.pl aborted due to compilation errors.
show(1, 1, 1); # gives compilation error
# Too many arguments for main::show at test.pl line 8, near "1)"
# Execution of test.pl aborted due to compilation errors.
您正在使用 subroutine prototypes. Don't. For more detail, see Why are Perl 5's function prototypes bad?
5.20 中引入的一项新的实验性功能是 subroutine signatures。那些做你希望子程序原型可以做的一切。
例如:
use strict;
use warnings;
use feature 'signatures';
no warnings 'experimental::signatures';
sub show ( $canvas, $actor ) {
$actor->draw( $canvas, $COLOR{default});
}
等等