我有一個腳本main.pl,其中包含一個串列回圈。此回圈呼叫包含退出條件的下標sub.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);
}
子.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處停止。
uj5u.com熱心網友回復:
sub.pl 總是在腳本結束時退出,而不僅僅是在您明確退出時退出其他地方。您可以使用 sub.pl 中的特定代碼退出:
exit 1 if $value eq "b";
然后在 main.pl 中查找退出代碼:
system( $cmd ) and last
uj5u.com熱心網友回復:
添加到@AKHolland 的答案...
一般來說,不幸的是,不能只檢查system($cmd)as perl的退出代碼,因為將更多資訊多路復用到$?. [1] 我建議總是使用這樣的代碼來檢查它。
system($cmd);
last if ( ($? >> 8) & 255);
[1] https://perldoc.perl.org/functions/system
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/399095.html
