如何有条件地定义一个Perl子例程?
发布时间:2020-12-15 22:04:00 所属栏目:大数据 来源:网络整理
导读:我想定义一个依赖于命令行参数的Perl函数(称之为“差异”).以下代码不起作用: if ("square" eq $ARGV[0]) {sub difference {return ($_[0] - $_[1]) ** 2}}elsif ("constant" eq $ARGV[0]) {sub difference {return 1}} 看起来条件被忽略,因此“差异”函数
我想定义一个依赖于命令行参数的Perl函数(称之为“差异”).以下代码不起作用:
if ("square" eq $ARGV[0]) {sub difference {return ($_[0] - $_[1]) ** 2}} elsif ("constant" eq $ARGV[0]) {sub difference {return 1}} 看起来条件被忽略,因此“差异”函数得到第二个定义,而不管$ARGV [0]的值如何. 我可以通过将条件放入函数来使代码工作: sub difference { if ("square" eq $ARGV[0]) {return ($_[0] - $_[1]) ** 2} elsif ("constant" eq $ARGV[0]) {return 1} } 但这并不是我的意图 – 我不需要在执行期间每次评估的条件.我只需要一种影响功能定义的方法. 我的问题是: >为什么第一个建筑不行? 解决方法
其他人已经呈现了您请求的语法,但是我建议为此使用更明确的子例程引用,以便您可以在不操作定义的情况下自由地操作引用.例如:
sub square_difference { return ($_[0] - $_[1]) ** 2 } sub constant_difference { return 1 } my %lookup = ( 'square' => &;square_difference,'constant' => &;constant_difference,); my $difference = $lookup{$ARGV[0]} || die "USAGE: $0 square|constantn"; print &$difference(4,1),"n"; 这是同样的基本方法,但是我认为这种语法将让您将参数更方便地映射到子例程,因为您添加更多的参数.注意这是Strategy Pattern的一个变化,如果你是这样的事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |