Raku'daki Perl's <> yerine alternatif mi?


11

Burada Raku (neé Perl 6) etrafında yolumu öğreniyorum, her yerde çok güzel. Ama <>Perl 5'in büyüsünü özlüyorum , burada sadece:

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

(bir sonraki girdi satırını okuyun $x, geri kalanı döngü yapın; girdi, dosya yoksa giriş veya standart girdi olarak adlandırılan dosyalardan gelir). "Perl 5 ila 6" öğreticileri / geçiş kılavuzları / ... sadece slurptüm dosyayı opening olarak veya tek tek dosyaları isme göre konuşur . Hiçbir sihirli "sırayla adlandırılmış dosyalardan girdi almak" bulabilirsiniz.

Sihri geri istiyorum!

Yanıtlar:


17

Aradığınız işlevsellik büyük ölçüde var. Bu komut dosyası:

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

Bu girdi dosyaları göz önüne alındığında:

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

Will, şu şekilde çağrıldığında:

raku script.p6 foo bar

Çıktı üretin:

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

Ayrıca $*INdosya yoksa çıktı alır . Mevcut olmayan tek şey, tek bir değiştirme işlemidir <>, çünkü bu wantarray, çoklu gönderim ile uyumsuz olan işlevselliğe bağlı olacaktır (ve Raku, çoklu gönderimin çok daha yararlı olduğunu düşünmektedir).

Sıfır-arg adayları getve linesuygulanmaktadır açısından$*ARGFILES argüman listeden veya dosya alma işlevselliğini sağlayan bir dosya sapı, $*INbir dosya tanıtıcısı beklediği herhangi koduna geçebilir anlamı -.


1
veya bilgiçlikle: raku script.raku foo bar. ;-)
p6steve

0

Senin için yeterli sihir mi?

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

2
Bu harika ve OP denemeli, ancak birkaç şekilde aynı değil. Taklit nasıl jnthn cevabını bakın <>raku olduğunu davranışlarını ve not .combbir argüman Perl en oysa bireysel karakterler içine bir dize böler olmadan splitbir argümandır olmadan afaik, .split(/\s+/)raku içinde.
Mart'ta

Bir alternatif .splitolacaktır .words- docs.perl6.org/type/Str#routine_words
donaldh

1
Kutsal rngesus tarafından neden wordsyöntemi unutmaya devam ediyorum ?
Holli
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.