Perl:如果退出条件在下标中,如何退出主脚本?
Perl: How to exit from main script if exit criteria is in a subscript?
我有一个脚本 main.pl,其中包含一个列表循环。此循环调用包含退出条件的下标 sub.pl。当条件满足时,程序只退出下标而不退出主脚本。我必须如何更改代码才能停止主脚本?
main.pl:
use strict;
use warnings;
my @list = qw (a b c);
foreach my $i (@list) {
my $cmd = "sub.pl $i";
print "$cmd\n";
system($cmd);
}
sub.pl:
use strict;
use warnings;
use Cwd;
my $dir0 = getcwd;
open my $LOG, ">>$dir0/log.txt" or die "Cannot open log.txt: $!\n";
my $value = $ARGV[0];
if ( $value eq 'b') {
print "\nExit from script 2\n";
exit;
}
print $LOG "Value is $value\n";
close $LOG;
标准输出是:
# sub.pl a
# sub.pl b
#
# Exit from script 2
# sub.pl c
$LOG 输出为:
# Value is a
# Value is c
我希望脚本在值 b 处停止。
sub.pl 总是在脚本结束时退出,而不仅仅是当您在其他地方显式退出时退出。您可以使用 sub.pl:
中的特定代码退出
exit 1 if $value eq "b";
然后在main.pl中查找退出代码:
system( $cmd ) and last
添加到@AKHolland 的回答中...
不幸的是,通常不能只检查 system($cmd)
的退出代码,因为 perl 将比退出代码多得多的信息多路复用到 $?
中,这让生活变得很困难。 [1] 我建议始终使用这样的代码来检查它。
system($cmd);
last if ( ($? >> 8) & 255);
我有一个脚本 main.pl,其中包含一个列表循环。此循环调用包含退出条件的下标 sub.pl。当条件满足时,程序只退出下标而不退出主脚本。我必须如何更改代码才能停止主脚本?
main.pl:
use strict;
use warnings;
my @list = qw (a b c);
foreach my $i (@list) {
my $cmd = "sub.pl $i";
print "$cmd\n";
system($cmd);
}
sub.pl:
use strict;
use warnings;
use Cwd;
my $dir0 = getcwd;
open my $LOG, ">>$dir0/log.txt" or die "Cannot open log.txt: $!\n";
my $value = $ARGV[0];
if ( $value eq 'b') {
print "\nExit from script 2\n";
exit;
}
print $LOG "Value is $value\n";
close $LOG;
标准输出是:
# sub.pl a
# sub.pl b
#
# Exit from script 2
# sub.pl c
$LOG 输出为:
# Value is a
# Value is c
我希望脚本在值 b 处停止。
sub.pl 总是在脚本结束时退出,而不仅仅是当您在其他地方显式退出时退出。您可以使用 sub.pl:
中的特定代码退出exit 1 if $value eq "b";
然后在main.pl中查找退出代码:
system( $cmd ) and last
添加到@AKHolland 的回答中...
不幸的是,通常不能只检查 system($cmd)
的退出代码,因为 perl 将比退出代码多得多的信息多路复用到 $?
中,这让生活变得很困难。 [1] 我建议始终使用这样的代码来检查它。
system($cmd);
last if ( ($? >> 8) & 255);