2010-11-24 7 views

ответ

11

Адрес S26:

Именованные Perldoc блоки которых является Ьурепате данные представляют собой Perl 6 эквивалент 5 __DATA__ секции Perl. Разница состоит в том, что = блоки DATA: просто обычные блоки Pod и могут отображаться в любом месте исходного файла, а также как много раз по мере необходимости. Synopsis 2 описывает новый интерфейс Perl 6 для встроенных данных .

В теории вы должны быть в состоянии сделать что-то вроде этого (кто-нибудь, пожалуйста, исправить синтаксис, если он выключен):

use v6; 

=begin DATA 
Foo 
=end DATA 

say @=DATA; 

In practice it seems что Rakudo не поддерживает, что, тем не менее.

+3

К сожалению Rakudo не реализуют их еще. – moritz 2010-11-24 17:05:45

8

Тщательно выборочно процитировать текущий S02 дизайн документа:

Там больше нет какой-либо специальный поток данных - любой блок Pod в текущем файле можно получить с помощью объекта Pod ...

Вы должны разделить содержимое [Pod block] на линии самостоятельно.

[Спекулятив-] Он также может быть возможным, чтобы рассматривать объект Pod как IO :: Handle, чтобы прочитать информацию Под линию за линией (подобно дескриптор DATA в Perl 5, но для любого блока Pod).

Таким образом, вместо одного DATA раздела на файл, который вы получаете доступ на чтение дескриптора файла, можно определить любое количество Pod блоков в файле сценария; они сохраняются в переменной $=pod во время компиляции; вы читаете из этой переменной; и те, которые называются «данными», являются эквивалентами Perl 5's DATA.

Это работает сегодня. Я покажу это мгновенно. Но сначала мне нужно поговорить о том, что сегодня не работает.

Приведенное выше было очень избирательным. В приведенном тексте говорилось о P6, автоматически создающем переменную с именем формы $=foo, соответствующей блокам Pod с именем «foo». Это общая нереализованная функция блоков Pod, а не только блоков данных.

В разделе «Блок данных» документа Pod Design doc 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. 

Так, Сорта работает. Но для этого явно требуется намного больше сахара.

Кстати, если последний стиль линии FP не имеет смысла, вот императив эквивалент:

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

Как обходным, пока это не получает в полном объеме, вы можете использовать heredocs.

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