我正在尝试将默认值设置为某些变量.我知道怎么做但我想使用子程序完成这项任务,我遇到了问题.
我有这三个变量:$t, $insize, $libtype.
这是一个简单的函数,如果它们未定义,则为它们设置默认值:
sub SetUnlessDefined {
my $t = 1 if !( defined $t );
my $insize = 300 if !( defined $insize );
my $libtype = 0 if !( defined $libtype );
return( $t, $insize, $libtype );
}
Run Code Online (Sandbox Code Playgroud)
我执行这样的功能:
( $t, $insize, $libtype ) = SetUnlessDefined( $t, $insize, $libtype );
Run Code Online (Sandbox Code Playgroud)
如果我的所有变量都未定义,则该函数运行正常,但如果我有任何值的值,则它无效.
有人可以建议我一个解决方案?或者是一种检查变量是否已定义以及是否未设置值的正确方法?
提前致谢
您没有读取子程序体中的参数:
sub defaults {
my ($t, $insize, $libtype) = @_; # <--- HERE
$t = 1 unless defined $t;
$insize = 300 unless defined $insize;
$libtype = 0 unless defined $libtype;
return ($t, $insize, $libtype);
}
Run Code Online (Sandbox Code Playgroud)
但是,如何处理任务还有其他方法:
sub defaults {
my @defaults = (1, 300, 0);
for my $i (0 .. $#defaults) {
$_[$i] //= $defaults[$i]; # Perl 5.10 needed
}
}
Run Code Online (Sandbox Code Playgroud)
子程序调用中不再需要赋值,因为参数别名为@_的成员:
defaults($t, $insize, $libtype);
Run Code Online (Sandbox Code Playgroud)