在Perl中使用defined / undef
发布时间:2020-12-15 21:42:57 所属栏目:大数据 来源:网络整理
导读:我计划将两个变量传递给一个perl函数,其中一个可能是可选的.我试图检查第二个是否被定义,但是它不能正常工作.当我将函数称为myFunction(18)时,它假定定义了$optional变量并转到else语句.但是在else语句中,当$可选变量被访问时,它会抛出“未初始化”错误.这与
我计划将两个变量传递给一个perl函数,其中一个可能是可选的.我试图检查第二个是否被定义,但是它不能正常工作.当我将函数称为myFunction(18)时,它假定定义了$optional变量并转到else语句.但是在else语句中,当$可选变量被访问时,它会抛出“未初始化”错误.这与我预期的完全相反.任何帮助是极大的赞赏.
sub myFunction { my ($length,$optional) = (@_); if(undef($optional) { more code.. } else { more code... } } myFunction(18) 解决方法
定义正确的功能. undef undefines $可选.你想做的是这样的:
sub myFunction { my( $length,$optional ) = @_; if( ! defined $optional ) { # Do whatever needs to be done if $optional isn't defined. } else { # Do whatever can be done if $optional *is* defined. } } 处理它的另一个方法(特别是Perl 5.10)是使用“defined or”运算符//,像这样: sub MyFunc { my $length = shift; my $optional = shift // 'Default Value'; # Do your stuff here. } 这样做是检测shift @_的返回值是否被定义.既然你已经调用了一次,我们现在正在测试第二个参数.如果已定义,则将该值分配给$optional.如果未定义,则将“默认值”分配给$可选.当然,你必须提出自己的理智默认. 如果你被困在Pre-Perl 5.10的黑暗时代,你可以完成相同的: my $optional = shift; $optional = defined $optional ? $optional : 'Default value'; …要么… my $length = shift; my $optional = defined( $_[0] ) ? shift : 'Default value'; 无论哪种方式,我经常喜欢有一个理智的默认,而不是完全独立的控制流程.这通常是简化代码的好方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |