4

一致しない配列中かっこ ("[ ]") またはスコープ ブラケット ("{ }") を使用して perl プログラムをコンパイル (または実行) すると、"missing right curly or square bracket" 構文エラーが発生します。Perl はしばしばソースを最後のコード行 ("at EOF") として報告しますが、これは実際に欠落している部分とはかけ離れている可能性があります。

perl エラー メッセージの例:

Missing right curly or square bracket at ./foo.pl line 100, at end of line
syntax error at ./foo.pl line 100, at EOF
Execution of ./foo.pl aborted due to compilation errors.

vi または Vi IMproved (VIM) ユーザーは、このエラー メッセージをどのようにトラブルシューティングしますか? いくつかの VIM 拡張機能を備えた回答を追加しました。独自のアイデア、プラクティス、または vi プラグインを追加してください。

注:元の質問は VIM バージョンで投稿されましたが、perl の括弧と括弧が強調表示されていませんでした。多くの新しいバージョンはこれを行います。詳細については、 vim.orgを参照してください。

4

10 に答える 10

13

このエラーを今すぐトラブルシューティングする方法:

  1. VIM で、開始の {、[、または ( 記号を選択します。%コマンドは、一致する { }、[ ]、および ( ) のペア間でジャンプします。不一致は、予期しない場所にジャンプします。

  2. perltidyをインストールして実行し、奇妙にインデントされたコード ブロックを探します。

今後のエラーを防ぐ方法:

  1. StackOverflow の質問 719476は、中括弧/大括弧の VIM 中括弧/大括弧構文の色分けを変更する方法を示しています。(一部のバージョンでは、デフォルトでこれが行われません。)

  2. Karl Guertin の AutoClose プラグインは、入力時に [、(、{、"、' 記号を自動照合します。

  3. perltidyスクリプトは、読みやすくするために perl を再フォーマットします。これにより、シンボルの不一致が明らかになる可能性があります。

  4. 有料のオタクであるユーザーは次のように述べてます。

    nmap \g mt:%!perltidy<CR>'t

  5. 一貫性のある {} 一致するインデントを使用します (一般的なヒントであり、この perl エラーに固有のものではありません)。

 

sub foo {
...
}

また

sub bar
{
...
}
于 2009-11-24T22:24:52.437 に答える
9

このコマンドを使用して%、vim の中括弧/大括弧/括弧を一致させることができます。それを使用して、一致しない文字を検索します。

于 2009-11-24T22:17:58.527 に答える
5

私は常にperltidyを使用してコードを再フォーマットしています。ターミネータが欠落しているコードを再フォーマットすると、さらにコードが奇妙にインデントされ、問題を突き止めるためにすばやく上にたどることができます。

ボーナス:このマッピングを使用して、ファイルを即座に再フォーマットし、カーソル位置を失わないようにします:

nmap \g mt:%!perltidy<CR>'t
于 2009-11-25T08:48:40.623 に答える
3

パドレを使用してください。Perl->一致しない中括弧の検索をクリックします。問題にカーソルを移動します。

私は同じ問題でこのページに来ました。perltidyとvimを使用しても役に立たなかったため、perltidyの後でインデントは正常に見えました。何らかの理由で、「sub」キーワードの前に余分な中括弧がありました。パドレはワンクリックで問題を解決しました。

http://padre.perlide.org/

于 2012-10-25T20:46:58.310 に答える
1

構文の強調表示を使用します。vim はほとんどの場合これを正しく行い、非常に洗練された perl 構文の強調表示スキームを備えています。

:syntax on

于 2009-11-24T22:17:18.170 に答える
0

中括弧が見つからない場合: Windows で作成されたファイルを Linux で使用しようとしている場合、 \r\n
に 置き換えると、この問題を解決するのに役立ちます。

于 2013-03-05T12:29:41.573 に答える
0

中括弧と角括弧が完全に一致しているように見えるスクリプトでこのエラーが発生しました...ただし、実際には1行の後半をコメントアウトしたbashスタイルの構文を使用しました(中括弧ペアの後半を使用) .

この行を変更すると、エラーはなくなりました。

$data_len="${#insert_data}";

これに:

$data_len=length($insert_data);
于 2015-01-30T08:30:18.507 に答える
0

教育の状況について話しているように聞こえるかもしれませんが、その場合、適切なインデントを教えることで、これらの問題のほとんどが解決されます。

ただし、vim や perltidy のような優れた機能のないサーバーを使用している場合があり、構文エラーを見つけるためにクイックアンドダーティ手法を使用します。行番号が変更されるまで、コードのさまざまなポイントに右巻きを追加するだけです。 、そしてあなたの問題点があります。

于 2009-11-27T23:02:40.387 に答える