大佬教程收集整理的这篇文章主要介绍了Perl使用子调用作为另一个子意外上下文的参数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
test(isinstring(),'second parameter','third parameter'); sub test { my ($Boolean,$second,$third) = @_; print "Boolean: $Boolean\n second: $second\n third: $third\n"; } sub isinstring { my $searchFor = 'a'; my $searchIn = 'bcd'; return ($searchFor && $searchIn && ($searchIn =~ $searchFor)); }
在上面的例子中,我希望“isinstring”中的return语句计算为false(”或undef或者perl中可能存在的任何东西),这将作为参数#1传递给“Test”,如你所知d基本上有
Test(undef,'third parameter');
但事实并非如此. isinstring返回一个空数组,基本上你得到的是
Test('second parameter','third parameter');
从perl调试器中的isinstring返回给出:
列表上下文从main :: isinstring返回:
空数组
我假设这是一个perl上下文的东西,我可以先分配一个标量变量,它工作正常:
@H_364_2@my $bool = isinstring(); Test($bool,'third parameter');调试器给出 –
标量上下文从main :: isinstring返回:”
编辑我删除所有parens相同的结果:
sub isinstring { my $searchFor = 'a'; my $searchIn = 'bcd'; return $searchFor && $searchIn && $searchIn =~ $searchFor; }
调试器仍然给出:
列表上下文从main :: isinstring返回:
空数组
有人可以解释为什么它在这种情况下返回列表上下文/空数组?
test( !!isinstring(),'third parameter' );
通过在参数列表中调用它,您已将其强制转换为“列表上下文”.你可以用这样的东西强制它.一个爆炸(!)在布尔上下文中对其进行求值,并使其为1或”.但既然你没有测试补充,而是价值本身,把另一个爆炸放在那里可以让你回到你想要的价值.
但是,由于从函数体中可以清楚地看到,您正在返回一个布尔值,并且您在列表上下文中调用它(参数列表是列表上下文),您可能希望在那里强制定义一个值.像这样:
return ($searchFor && $searchIn && $searchIn =~ $searchFor) || 0;
以上是大佬教程为你收集整理的Perl使用子调用作为另一个子意外上下文的参数全部内容,希望文章能够帮你解决Perl使用子调用作为另一个子意外上下文的参数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。