2
substr($obj_strptime,index($strptime,"sub")+6,0) = <<'ESQ';
 shift; # package
 ....
 ....
ESQ

このESQとは何ですか?ここでは何をしていますか?これらのステートメントを理解するのを手伝ってください。

4

2 に答える 2

10

ヒアドキュメントセクションの終わりを示します。

ただし、EOFはESQよりも伝統的です。

于 2010-08-05T12:19:19.640 に答える
1

この構成はヒアドキュメントとして知られています(ファイルシステム上の外部ドキュメントではなく、ここのドキュメントから標準入力を取得しているため)。

基本的に、次の行から終了マーカー行を除くすべてを読み取り、それを実行中のプログラムまたはコマンドへの標準入力として使用します。終了マーカー行は、に続くテキストによって制御されます<<

例として、bash(Perlよりもよく知っている)では、次のコマンドを実行します。

cat <<EOF
hello
goodbye
EOF

が実行さcatれ、2行が標準入力に送信されます(hello行とgoodbye行)。Perlにもこの機能がありますが、構文は少し異なります(言語が異なる場合は、ご想像のとおり)。それでも、説明がまだ続くには十分に近いです。

ウィキペディアには、ヒアドキュメントと呼ばれていることを知っていればおそらく見つけたであろうこのエントリがありますが、そうでなければ、それを理解するのはかなり難しいでしょう。

基本的に、適切なマーカーを使用できます。たとえば、入力行の1つがであったEOF場合、標準の入力が途中で終了するため、それをマーカーとして実際に使用することはできません。

cat <<EOF
This section contains the line ...
EOF
but then has more stuff
and this line following is the real ...
EOF

その場合は、DONE(またはテキストの独自の行に表示されないもの)を使用できます。

マーカーの前後に引用符を使用する(インデントの見栄えを良くする)、変数の置換を制御するための単一引用符または二重引用符の使用など、他のオプションがあります。

このperlopページにアクセスして検索すると<<EOF、すべてが明らかになることを願っています。

于 2012-08-14T19:58:10.093 に答える