[migration] 라쿠에서 펄의 <> 대안?

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

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

(다음 입력 행을 읽고 $x나머지를 반복하십시오. 입력은 파일이 없으면 입력 또는 표준 입력으로 이름이 지정된 파일에서 가져옵니다). “Perl 5 to 6″튜토리얼 / 마이그레이션 가이드 / … slurp는 전체 파일 또는 open개별 파일 이름에 대해 이야기 합니다 . 마술은 “명명 된 파일에서 순서대로 입력받지”않습니다.

나는 마법을 다시 원한다!



답변

찾고있는 기능은 대부분 존재합니다. 이 스크립트는 :

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하나는 파일 핸들을 기대 코드에 전달할 수있는 의미를 -.


답변

당신에게 충분한 마법?

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


답변