0

マウンテンライオンがインストールされたMacProでgccg(gccg.sourceforge.net)をビルドしようとしています。マニュアルに従ってすべてのものをインストールしようとしましたが、次のようなエラーが発生しました。

gccg_package.pl:gccg_packageには、gccg_package.plの1224行目にgunzipが必要です。

次に、この問題を根絶しようとしています。そして、これの根源を再帰的に見つけます。

($_ = `gunzip --version 2>&1`)  &&  /gunzip / or die "$0: gccg_package requires gunzip";

この&&演算子を使用してオペランドの各部分を出力し、「/gunzip/」がここでfalseを返すことを確認します。ここでの問題は、これらのステートメントがここで何を意味するのかわからないということです。

perlの初心者に申し訳ありませんが、チュートリアルを見つけようとしましたが、とにかく検索するのはそれほど簡単ではないようです。

4

3 に答える 3

4

つまり、の出力にgunzip --version 2>&1文字列が含まれていない場合、プログラムは終了しますgunzip

  • $_ = `gunzip --version 2>&1`バックティックでシェルコマンドを実行し、その出力をキャプチャし、出力をに格納し、$_出力が返された場合はtrueを返します。
  • /gunzip /一致演算子です。$_のコンテンツに文字列が含まれている場合はtrueを返しますgunzip
  • die例外をスローします。
于 2013-03-26T09:16:52.397 に答える
2

私はperlで少し錆びていますが:

最初の部分($_ = `gunzip --version 2>&1`)が実行gunzip --version 2>&1され、出力がに保存されます$_

これ&&はショートカット操作として使用され、左側がtrueに戻ると、右側が実行されます。

右辺/gunzip /は正規表現です。perlでは、正規表現に対して宣言された変数(scalar)がない場合、デフォルトの変数で実行されます。$_ したがって、これは最初の部分の出力で「gunzip」を検索し、次の場合はtrueを返します。それが含まれています

最後の部分or die "$0: gccg_package requires gunzip";は、前の2つの部分のいずれかがfalseを返した場合にのみ実行されます。

短絡動作の詳細については、http://www.perlmonks.org/?node_id=301355を確認してください。

于 2013-03-26T08:00:04.113 に答える
1

基本的に、この行は、をインストールする必要があることを示していますgunzip

gunzipUnixコマンドです; この行が行うことは、最初に変数にパーツ$_の結果を割り当てることです。次に、その変数に対してgunzip --version正規表現検索を実行して、コマンドの結果に含まれていることを確認します(スペースなしで、コマンドの結果がだった場合にも検出されます)。そして最後に、検索が成功しなかった場合、たとえば何らかの理由で実行されなかった場合、プログラムは、読んだメッセージを出力した後に停止します()。/gunzip /gunzipgunzipgunzip: command not foundgunzipdie

于 2013-03-26T07:59:21.427 に答える