Альтернатива Perl's в Раку?


11

Тут я вивчаю свій шлях навколо Раку (не Perl 6), дуже приємно все навколо. Але я дуже сумую за магією <>Perl 5, де можна просто:

my $x = <>;
print $x;
while(<>) {
  print join(':', split);
}

(читайте наступний рядок введення на $x, переведіть цикл на решту; вхід - з файлів, названих як вхідний або стандартний, якщо файл не вказаний). Навчальні посібники "Perl 5 - 6" / посібники з міграції / ... просто говорять про те, slurpщоб використовувати весь файл або про openокремі файли за назвою. Ніякої магії "приймати введення з названих файлів послідовно" я не можу знайти.

Я хочу повернути магію!

Відповіді:


17

Функціонал, який ви шукаєте, багато в чому існує. Цей сценарій:

my $x = get();
say "First: $x";
for lines() {
    .say
}

З огляду на ці вхідні файли:

$ cat foo
foo line 1
foo line 2
$ cat bar
bar line 1
bar line 2

Коли буде викликано як:

raku script.p6 foo bar

Отримайте вихід:

First: foo line 1
foo line 2
bar line 1
bar line 2

Він також отримає вихід, $*INякщо файлів немає. Єдине, чого не існує, - це єдина заміна <>, оскільки це залежатиме від wantarrayфункціональності -подобних функцій, несумісного з декількома відправками (а Раку вважає, що багаторазове відправлення набагато корисніше).

Кандидати з нульовим аргументом для getта linesреалізовані в термінах$*ARGFILES , обробка файлів, яка забезпечує функціональність прийому файлів зі списку аргументів або з $*IN- означає, що можна передавати його будь-якому коду, який очікує на обробку файлу.


1
або, педантично: raku script.raku foo bar. ;-)
p6steve

0

Чи вистачить вам магії?

sub MAIN( Str $file where *.IO.f  )
{
    .say for $file.IO.lines.map: *.comb.join(':');
}

2
Це здорово, і ОП повинен спробувати це, але це не те саме в декількох способах. Дивіться відповідь jnthn про те, як наслідувати <>поведінку, і зауважте, що raku .combбез аргументу розділяє рядок на окремі символи, тоді як Perl splitбез аргументу - afaik, .split(/\s+/)в raku.
raiph

Альтернативою .splitбуде .words- docs.perl6.org/type/Str#routine_words
donaldh

1
Чому, святим ренгесом, я забуваю про wordsметод?
Холлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.