Thay thế cho Perl's <> trong Raku?


11

Ở đây học theo cách của tôi xung quanh Raku (neé Perl 6), rất tốt đẹp xung quanh. Nhưng tôi vô cùng nhớ ma thuật <>từ Perl 5, nơi bạn có thể chỉ:

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

(đọc dòng đầu vào tiếp theo vào $x, lặp qua phần còn lại; đầu vào là từ các tệp có tên là đầu vào hoặc đầu vào tiêu chuẩn nếu không có tệp nào được cung cấp). Hướng dẫn "Perl 5 đến 6" / hướng dẫn di chuyển / ... chỉ nói về việc slurplấy toàn bộ tệp hoặc nhập opentừng tệp theo tên. Không có phép thuật "lấy đầu vào từ các tệp được đặt tên theo trình tự" tôi có thể tìm thấy.

Tôi muốn phép thuật trở lại!

Câu trả lời:


17

Các chức năng bạn đang tìm kiếm phần lớn tồn tại. Kịch bản này:

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

Cho các tệp đầu vào:

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

Will, khi được gọi là:

raku script.p6 foo bar

Sản xuất đầu ra:

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

Nó cũng sẽ lấy đầu ra từ $*INnếu không có tập tin. Điều duy nhất không tồn tại là một sự thay thế duy nhất <>, vì điều đó phụ thuộc vào wantarraychức năng giống như, không tương thích với nhiều công văn (và Raku coi nhiều công văn là hữu ích hơn nhiều).

Các ứng cử viên zero-arg cho getlinesđược triển khai theo$*ARGFILES cách xử lý tệp cung cấp chức năng lấy các tệp từ danh sách đối số hoặc từ $*IN- có nghĩa là người ta có thể chuyển nó tới bất kỳ mã nào mong muốn xử lý tệp.


1
hoặc, theo phương pháp sư phạm: raku script.raku foo bar. ;-)
p6steve

0

Đủ phép thuật cho bạn?

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

2
Điều đó thật tuyệt, và OP nên thử nó, nhưng nó không giống nhau theo một số cách. Xem câu trả lời của jnthn để biết cách mô phỏng <>hành vi của họ và lưu ý rằng raku .combkhông có đối số sẽ chia một chuỗi thành các ký tự riêng lẻ, trong khi Perl splitkhông có đối số là .split(/\s+/)raku.
21h20

Một thay thế .splitsẽ là .words- docs.perl6.org/type/Str#routine_words
donaldh

1
Tại sao, bởi các rngesus thánh, tôi cứ quên wordsphương pháp?
Holli
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.