- ベストアンサー
CGIのPerlの命令の終わりと、本について
CGIをPerlで始めたばかりで、初心者向けの書籍を買いました。秀和システムの入門です。それには__END__で終了と書いていました。翔泳社の辞典を次に買うと、exitと書かれており、__END__は索引にすら載っていませんでした。この2冊しか店には置いていなかったのですが、秀和システムさんの本をやったあと、翔泳社の辞典はギャップがありすぎます。別のを探した方がよいでしょうか?お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
普通、Perlのスクリプトは上から順に実行され、一番下まで実行されると終了しますが、それを途中で終了させるための命令が exit です。 一方 __END__ は、「スクリプトの一番下はここですよ」という「しるし」です。 __END__ だけの行があるとそこがスクリプトの一番下と見なされ、そこまで実行されるとプログラムは終了します。 また、__END__ 以降はデータ領域として利用することができ、特殊ファイルハンドル DATA から読み出すことができます。 例えば、 ******** while (<DATA>) { print "Data: $_"; } __END__ ここは データ領域 です。 ******** これを実行すると、 Data: ここは Data: データ領域 Data: です。 と表示されます。 このような用途に使えるため、__END__ の代わりに __DATA__ と書くこともできます。 ※スクリプトのインデントに全角空白を使っているので、コピーして試す場合はタブなどに置き換えて下さい。
その他の回答 (3)
- natsuki_tk
- ベストアンサー率35% (99/279)
__END__やら__DATA__やらあります。(他にもいくつか) 基本的には、exitが終了の命令となります。 ENDの方はコメントアウトに近い感じと捉えると良いかと思います。 >別の用途でPerlで使用できますが、本書では説明いたしません。 __END__以降に記述した文字列を、 プログラム実行時に読み込むことができます。 それが、「別の用途」ということなのでしょう。 ただし、実際にはあまり使われていないような気がします・・。
お礼
ありがとうございました。
- happy_books
- ベストアンサー率28% (131/460)
__END__ は特殊リテラと呼ばれる物です。 これが書かれている行、以降を、Perlは無視する ようです。 exit; はこの関数が読み込まれたら、プログラムを 終了します。 似たようなものですが、exit;を使う方が一般的 だと思いますよ。 私はこちらしか使いませんし。 ただ、__END__ の利点はその下に書かれている事は 無視されるので、デバッグやメモに使えるのかも しれません。 全くのプログラム初心者なら、小難しい本よりは、 10日でできるPerl等の本を読んだ方がさくさく 勧めて気持ちいいです。 Perlの辞典は私は、技術評論社のポケットリファレンス を使っています。 __END__もきちんと載っていましたよ。 最初に読んだPerlで読んだ本は、図書館での借り物で 名前を忘れてしまいました。 また、2,3の本は読んだ方がいいかもしれません。
お礼
ありがとうございました。
- Fukutarou
- ベストアンサー率30% (193/641)
cgiのperlのコマンドの終了はexitです。 いろいろなcgiを開いてみるとたまに__end__が有りますが、その上にexitで終了させてますので、}を含んで終わりの目安で付けるようにしては?の意味でしょう。 ***************** exit; } __END__ ***************** ってな感じです。
補足
秀和システムさんのほうにはexitについて触れていませんでした。Perlの命令の終わりは__END__です。本来であれば、「__END__」以降に記述したものは別の用途でPerlで使用できますが、本書では説明いたしません。とくくってありました。どう解釈すればよいのでしょうか?
お礼
ありがとうございました。