我想知道如何从子程序中留下一个switch case元素:
#!/usr/bin/perl
use Switch;
switch ($command) {
case 'create_vmr' {
... do something ...
callsub($blabla);
... do something more ...
}
case 'delete_vmr' {
... do something ...
callsub($blabla);
... do something more ...
}
}
... final code ...
exit(0);
sub callsub {
... check something ...
last if $condition;
}
我的想法是,来自callsub()的'last'将退出调用它的情况,以便代码将在switch elemeent之后继续。但这不起作用。如果我直接在case元素中调用它,'last'工作正常。
那么,我怎样才能将switch元素从sub?
中删除编辑:我不想使用'转到'请;)
答案 0 :(得分:3)
我建议不要试图通过隐藏休息来模糊你的程序流程。
相反,如果子例程成功,则使子例程返回一个真值,并从调用代码块中断。
在这种情况下,我建议使用调度表而不是deprecated Switch模块。以下内容应证明:
use strict;
use warnings;
my %dispatch = (
create_vmr => sub {
# ... do something ...
callsub('foo') or return;
# ... do something more ...
},
delete_vmr => sub {
# ... do something ...
callsub('bar') or return;
# ... do something more ...
},
);
my $command = 'delete_vmr';
if ( $dispatch{$command} ) {
$dispatch{$command}();
} else {
warn "Unrecognized $command";
}
exit(0);
sub callsub {
# ... check something ...
return $_[0] eq 'foo';
}