このプログラムはなぜ有効なのでしょうか? 構文エラーを作成しようとしていました 質問する

このプログラムはなぜ有効なのでしょうか? 構文エラーを作成しようとしていました 質問する

私はActiveStateの32ビットを実行していますアクティブパールWindows 7 上の 5.14.2。構文エラーのあるプログラムがチェックインされているのを検出するために、Git のコミット前フックをいじってみたくなりました。(どういうわけか、このような悪いコミットを実行してしまったのです。) そこで、テスト プログラムとして、これをランダムに書き留めました。

use strict;
use warnings;

Syntax error!

exit 0;

ただし、警告なしでコンパイルおよび実行され、終了時にエラーレベルは 0 になります。これは有効な構文ですか?

ベストアンサー1

Perlには「間接メソッド記法」と呼ばれる構文があります。これにより

Foo->new($bar)

と書くと

new Foo $bar

つまり

Syntax error ! exit 0;

と同じです

error->Syntax(! exit 0);

または

error->Syntax(!exit(0));

これは有効な構文であるだけでなく、最初に実行されるのは であるため、実行時エラーは発生しませんexit(0)


この「機能」は、次のいずれかの方法で無効にできます。

no feature qw( indirect );  # Perl 5.32+

use v5.36;                  # Perl 5.36+

あるいは、次の方法で警告を受け取ることもできます。

no indirect;                # CPAN module

おすすめ記事