Perl,将数组传递给子程序,处理未声明的变量
Perl, passing array into subroutine, dealing with undeclared variables
我有一个 sub 有一些固定变量和我在 sub 中声明和使用的变量,但是当我调用这个 sub 时我不能声明它们。
例如:
sub func{
my ($firm1, $firm2, $possible) = @_;
...
if($possible eq "smth"){ # in case i passed this scalar
}
elsif($possible eq ("smth else" or undef/i_don_t_know)){ # in case i didn't passed this var, but i need it as at least undef or smth like that
}
func(bla, bla, bla); # ok
func(bla, bla); # not ok
当我尝试这样做时,出现错误
"Use of uninitialized value $possible in string eq at test.pl line
..."
我该如何纠正?
这不是声明的问题,而是传递了一个未定义的值。
有几种处理方法:
- 测试
defined
变量
- 设置一个'default'
$possible //= "default_value"
如果未定义则有条件赋值。
或者完全做其他事情。
这不是声明的问题。如果只将两个参数传递给以
开头的子例程
my ( $firm1, $firm2, $possible ) = @_;
那么$possible
是undefined,意思就是设置为特殊值undef
,就像NULL
,None
、nil
等其他语言
如您所见,您无法在不引起警告消息的情况下比较未定义的值,并且您必须首先使用 defined
运算符来检查变量是否已定义
我 认为 您想测试 $possible
是否已定义并设置为字符串 smth
。你可以这样做
sub func {
my ( $firm1, $firm2, $possible ) = @_;
if ( defined $possible and $possible eq 'smth' ) {
# Do something
}
}
func( qw/ bla bla bla / ); # ok
func( qw/ bla bla / ); # now also ok
我有一个 sub 有一些固定变量和我在 sub 中声明和使用的变量,但是当我调用这个 sub 时我不能声明它们。
例如:
sub func{
my ($firm1, $firm2, $possible) = @_;
...
if($possible eq "smth"){ # in case i passed this scalar
}
elsif($possible eq ("smth else" or undef/i_don_t_know)){ # in case i didn't passed this var, but i need it as at least undef or smth like that
}
func(bla, bla, bla); # ok
func(bla, bla); # not ok
当我尝试这样做时,出现错误
"Use of uninitialized value $possible in string eq at test.pl line ..."
我该如何纠正?
这不是声明的问题,而是传递了一个未定义的值。
有几种处理方法:
- 测试
defined
变量 - 设置一个'default'
$possible //= "default_value"
如果未定义则有条件赋值。
或者完全做其他事情。
这不是声明的问题。如果只将两个参数传递给以
开头的子例程 my ( $firm1, $firm2, $possible ) = @_;
那么$possible
是undefined,意思就是设置为特殊值undef
,就像NULL
,None
、nil
等其他语言
如您所见,您无法在不引起警告消息的情况下比较未定义的值,并且您必须首先使用 defined
运算符来检查变量是否已定义
我 认为 您想测试 $possible
是否已定义并设置为字符串 smth
。你可以这样做
sub func {
my ( $firm1, $firm2, $possible ) = @_;
if ( defined $possible and $possible eq 'smth' ) {
# Do something
}
}
func( qw/ bla bla bla / ); # ok
func( qw/ bla bla / ); # now also ok