将值设置为未定义的变量

cuc*_*bit 2 perl

我正在尝试将默认值设置为某些变量.我知道怎么做但我想使用子程序完成这项任务,我遇到了问题.

我有这三个变量:$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)

如果我的所有变量都未定义,则该函数运行正常,但如果我有任何值的值,则它无效.

有人可以建议我一个解决方案?或者是一种检查变量是否已定义以及是否未设置值的正确方法?

提前致谢

cho*_*oba 5

您没有读取子程序体中的参数:

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)