라쿠에서 펄의 <> 대안?


11

여기 Raku (neé Perl 6) 주위에서 내 길을 배우십시오. 그러나 나는 <>Perl 5 의 마술 을 그리워합니다 .

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

(다음 입력 행을 읽고 $x나머지를 반복하십시오. 입력은 파일이 없으면 입력 또는 표준 입력으로 이름이 지정된 파일에서 가져옵니다). "Perl 5 to 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다중 디스패치와 호환되지 않는 유사한 기능에 의존하기 때문입니다. Raku는 다중 디스패치가 훨씬 더 유용하다고 생각합니다.

에 대한 제로, 인수 후보 get와는 lines구현 의 관점에서$*ARGFILES 인수 목록에서 또는에서 파일을 복용의 기능을 제공하는 파일 핸들, $*IN하나는 파일 핸들을 기대 코드에 전달할 수있는 의미를 -.


1
또는 pedantically : raku script.raku foo bar. ;-)
p6steve

0

당신에게 충분한 마법?

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

2
멋지다. OP는 시도해야하지만 몇 가지 측면에서 동일하지는 않다. <>의 행동 을 모방하는 방법에 대해서는 jnthn의 대답을 참조하십시오 .comb. 인수없는 raku 는 문자열을 개별 문자로 나누는 반면, 펄 split은 인수없는 .split(/\s+/)akuik입니다.
raiph

대안 .split은 다음과 같습니다. .wordsdocs.perl6.org/type/Str#routine_words
donaldh

1
거룩한 렌지 수스에 의해 왜 그 words방법을 잊어 버리는가 ?
홀리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.