解決済み

__DATA__の意味

  • 暇なときにでも
  • 質問No.1939458
  • 閲覧数271
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

こんばんは、皆さん

あるプログラムで__DATA__というものを見かけました。
while文で<DATA>となっているので、ファイルハンドルのようですが、
これの具体的な使用方法(__DATA__の有効範囲など)と、この名称を教えてください。
また、別の質問でも質問したように、こちらもリファレンスや2次元配列と一緒に解説されている書籍はありますでしょうか?
初心者向けの本に載っていないということは、中級者以上でないと使いこなせないものなのでしょうか?


よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.2

ベストアンサー率 50% (3003/5914)

__DATA__ トークンは、コレより以降にプログラムがない(データブロックの開始位置を示す)モノです。
既にでているようにこの部分のデータは、DATA ハンドルで普通のファイルのように(プログラム内にファイルが格納されているかのように)アクセスできます。
特殊な用法として、普通のファイルのようにstat(DATA)を使うことで、プログラムのサイズや最終更新日付を得ることができます。
同様のものに__END__がありますが、これは、メインパッケージの __DATA__ を表します。
また、自パッケージだけでなく、他パッケージの__DATA__ の部分は
パッケージ名::DATA
で読み込むことができます。
(通常はmain::DATA のmain が省略されている)
__END__ を使用した場合には、他パッケージからは読込できません。
繰り返し読み込む場合には、
$pos=tell(DATA);
しておいて
seek(DATA,$pos,0);
で読込位置をリセットします。
(seek を使うと、__END__ 以前の部分(プログラム)も読み込める)
また、CPAN モジュールの Inline::Files を使うと、複数のファイルを埋め込むことができるようになります。
お礼コメント
noname#17299

いつも詳しい回答ありがとうございます。

stat(DATA)はお礼を書き終えたら早速試してみます。
__END__と__DATA__の違いもわかりました。
パッケージはまだサンプル以外で使ったことがないので、
どういうときに使ったら便利なのかピンときませんが、
使うときまでそういうものがあったと覚えておきます。
seek関数を使って読み込み位置を制御できるのは便利ですね。
1行ずつ読み込みを制御するのでしょうか?これも試してみます。
Inline::Filesの使い方はいまいちよくわかりませんが、
現時点ではそういうものがあるとだけ覚えておきます。

どうもありがとうございました。
投稿日時 - 2006-02-06 22:11:28

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 28% (11/38)

__DATA__の方はあまり使ったこと有りませんが、<DATA>の方であれば__END__と組み合わせてちょっとしたスクリプトの動作確認なんかによく使ったりします。いちいち読込用のファイルを作成してopenするのが面倒な時とかです。
参考URLはちょっとした調べ物などに便利な本です。
お礼コメント
noname#17299

売っているのはよくみかけますが、丸みを帯びた字がいい加減な印象だったので、
きちんと書かれていないのではないかという先入観を持っていました。
本屋さんに行ったら内容をよく読んでみます。
現在の自分のレベルと合っているか確認して、使えそうだったら買ってみます。

ありがとうございました。
投稿日時 - 2006-02-06 22:13:44
  • 回答No.1

ベストアンサー率 66% (1052/1578)

__DATA__は特殊リテラルでファイルハンドルDATAで読み出す事ができます。具体例は参考URLの「プログラム内データの読み込み」を読んでみてください。
こちらについては、難易度というよりあまり使用されていないからというのが、解説が省略されている理由のような気がします。
お礼コメント
noname#17299

せっかく回答いただいて申し訳有りません。
URLの説明を読みましたが、残念ながらわかったようでよくわかりませんでした。
__DATA__がなく一覧と言えるか微妙でした。
また、教えていただいたURLの内容だと__END__と__DATA__の違いが明確になりませんでした。

__DATA__は特殊リテラルと言うんですね。
この名称がわかったので知識の土台が増えました。
今後は特殊リテラルで検索することができるようになりました。

ありがとうございました。
投稿日時 - 2006-02-06 22:04:40
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ