my $a =10;
my $b =200;
my $c,$d;
goto UP if ($a > 20);
$d = $c + $b;
print "$d\n";
UP:
$c = $b -$a;
print "$c\n";
ラベル内の上記のステートメントは、条件が失敗した場合でも実行されます。
ラベルとgoto
動作を混同しているようです。実際、goto
フロー制御には絶対に使用しないでください。それは本当に紛らわしいです。
現時点でのコードの実行方法は次のとおりです。
ご覧のとおり、最後の2つのステートメント(UP
ラベルの後のもの)は常に実行されます。Perlは条件をチェックし、それがtrueの場合は、先にスキップします。条件がfalseの場合、すぐに続く2つのステートメントを実行してから、ラベルと残りを実行します。
ラベルはPerlでサブルーチンを作成しません。行に名前を付けるだけです。コード行は引き続き正常に実行されます。
代わりにどちらか一方を実行する場合は、if-else構文が必要です。これはPerlではこのように行われます。
my $a = 10;
my $b = 200;
my ( $c, $d );
if ($a > 20) {
$c = $b -$a;
print "$c\n";
} else {
$d = $c + $b;
print "$d\n";
}
を主張しているように見えるのでgoto
、それを機能させることはできますが、実行を停止するように指示する必要があります。
my $a =10;
my $b =200;
my $c,$d;
goto UP if ($a > 20);
$d = $c + $b;
print "$d\n";
exit; # <------------- this stops execution and ends the program
UP:
$c = $b -$a;
print "$c\n";
もちろん、$c
と$d
は両方であるため、コードはあまり機能しませんundef
。
あなたは本当にとをオンにしuse strict
てuse warnings
、これらのプラグマタの両方があなたに示す問題を修正する必要があります。
また、$a
と$b
は内部で使用される予約変数であることに注意してくださいsort
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加