当我试图找出一种简单的方法来使变量作为参数传递给被调用子例程中不可变的子例程时,我发现了一个显示以下内容的网页:
Run Code Online (Sandbox Code Playgroud)#!/usr/bin/perl # Function Definition sub Func(Int $variable) { # Operation to be performed $variable /= 2; } # Defining a local variable my $value = 20; # Function Call with local variable print Func($value);输出:
Run Code Online (Sandbox Code Playgroud)Error: Cannot assign to an immutable value
谁能告诉我它所说的 Perl 版本是什么?它讨论了可以设置为可变或不可变的命名参数,这是我正在寻找的东西,但给出的示例对我来说根本不起作用。我正在使用 Perl 5.26.3。
任何人都可以知道它在谈论哪个 Perl 版本吗?
尽管有种种迹象表明,该片段根本不是 Perl。它是 Raku,Perl 的衍生产品,以前称为“Perl 6”。
Perl 有一个类似的功能,称为子例程签名。但参数并不是一成不变的。
#!/usr/bin/perl
use v5.36; # For sub signatures
sub f( $param ) {
$param /= 2;
}
say f( 20 );
Run Code Online (Sandbox Code Playgroud)
输出:
10
Run Code Online (Sandbox Code Playgroud)
我试图找出一种简单的方法来使作为参数传递给子例程的变量在被调用的子例程中不可变
您可以使用Readonly使变量不可变。
#!/usr/bin/perl
use v5.10; # For `say`.
use Readonly qw( Readonly );
sub f {
Readonly my $param => shift;
$param /= 2;
}
say f( 20 );
Run Code Online (Sandbox Code Playgroud)
输出:
Modification of a read-only value attempted at a.pl line 9.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |