2010-11-24 11 views

答えて

11

引用S26:その型名である DATAは、Perl 5の__DATA__部のPerl 6の等価な

名前はperldocブロック。 の違いは、= DATAブロックが の通常のPodブロックで、ソースファイル内のどこにでも 、必要に応じて と表示されることがあります。 Synopsis 2 は、 インラインデータ用の新しいPerl 6インターフェイスについて説明しています。

理論的にはあなたが(それはオフだ場合、構文を修正してください誰か)は、このような何かを行うことができるはず:Rakudoはまだ、それをサポートしていません

use v6; 

=begin DATA 
Foo 
=end DATA 

say @=DATA; 

In practice it seems

+3

残念ながらRakudoはそれらをまだ実装していません。 – moritz

+1

2016年後半にRakudoがサポートしているのは、[もっと最近のこの質問に対する回答](http://stackoverflow.com/a/27936867/1077672)です。 – raiph

8

慎重に選択的に現在のS02設計文書を引用する:もはや特殊なデータストリームがありません

- ポッドオブジェクトを介してアクセスすることができます 現在のファイルのいずれかのポッドブロック...

[Podブロック]の内容を自分で行に分割する必要があります。

[投機】また、ポッド情報ライン・バイ・ラインのPerl 5のデータ ファイルハンドルのような(しかしための任意のポッドブロックを読み取るために、ハンドル:: IOとしてポッド対象を治療することも可能です)。

ので、代わりにあなたはファイルハンドルを読むことによって、アクセス、ファイルごとに単一の、DATAセクションでは、スクリプト・ファイル内のポッド・ブロックの任意の数を定義します。コンパイル時に変数$=podに格納されます。あなたはその変数から読みます。 「データ」と呼ばれるものはPerl 5のDATAの同等物です。

これは今日では動作します。私はそれを一瞬で見せます。しかし、まず、今日はうまくいかないことについて話す必要があります。

上記の引用は非常に選択的でした。省略されたテキストは、名前が 'foo'のPodブロックに対応する形式の名前が$=fooの変数を自動的に作成するP6について話しました。これは、データブロックだけでなく、ポッドブロックの一般的に未実装の機能です。

ポッドデザインの文書S26の「データブロック」セクションでは、普通の古いPodブロックよりも面白いものをやっているデータブロックについて語っています。これはまだ実装されていません。

だから、今今日は何ができるかに移りましょう:

=foo This is a Pod block. A single line one. This Pod block's name is 'foo'. 

=begin qux 
This is another syntax for defining a Pod block. 
It allows for multi line content. 
This block's name is 'qux'. 
=end qux 

=data A data block -- a Pod block with the name 'data'. 

# Data blocks are P6's version of P5's __DATA__. 
# But you can have multiple data blocks: 

=begin data 
Another data block. 
This time a multi line one. 
=end data 

$=pod.grep(*.name eq 'data').map(*.contents[0].contents.say); 

この版画:

A data block -- a Pod block with the name 'data'. 
Another data block. This time a multi line one. 

だから、それはみかん動作します。しかし、はるかに多くの砂糖が明らかに必要です。回避策これは完全に実装されるまで、あなたはヒアドキュメントを使用することができるよう

for @$=pod { 
    if .name eq 'data' { 
    say .contents[0].contents 
    } 
}; 
1

:ところで

は、最後のFPスタイルのラインが意味をなさなかった場合、ここでは不可欠と同等です。

for data().lines -> $line { 
    put $line; 
} 

sub data { 
    return q:to/END/; 
      Foo, bar, baz 
      1, 2, 3 
      END 
} 

出力

Foo, bar, baz 
1, 2, 3 
関連する問題