条件が失敗した場合でも、ラベル内のステートメントは実行されます。ここで間違っていることを誰かが説明できますか?

ナンドゥ
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 strictuse warnings、これらのプラグマタの両方があなたに示す問題を修正する必要があります。

また、$a$bは内部で使用される予約変数であることに注意してくださいsort

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ