2016-12-22 27 views
5

Tôi cần kết quả của "cat variousFiles" vào chương trình perl6 trong khi yêu cầu chương trình lấy các đối số dòng lệnh khác nhau. Perl6 dường như muốn lấy đối số đầu tiên như một tập tin cần đọc. Tôi có thể viết lại các thói quen của mình, nhưng tôi muốn sử dụng một đường ống từ vỏ. Có cách nào để làm điều đó?perl6 Làm thế nào để đọc từ stdin và lấy dòng lệnh args?

Dưới đây là chương trình của tôi tên là testStdInArgs.pl:

say @*ARGS; 
for lines() { 
    say "reading ==> ", $_; 
} 

tôi muốn làm (foo và bar là lập luận):

cat logFile | perl6 testStdInArgs.pl foo bar 

Sau đây là các lỗi:

[foo bar] 
Earlier failure: 
(HANDLED) Unable to open file 'foo' 
    in block <unit> at stdInArgs.pl line 2 

Final error: 
Type check failed in binding to $iter; expected Iterator but got Failure (Failure.new(exception...) 
    in block <unit> at stdInArgs.pl line 2 

Cảm ơn bạn rất nhiều

Trả lời

5

Chức năng lines là phím tắt cho $*ARGFILES.lines.
$*ARGFILES là một tập tin ma thuật xử lý đại diện cho một nối của các tập tin được chỉ định như đối số dòng lệnh (@*ARGS), và rơi trở lại stdin chỉ khi @*ARGS là sản phẩm nào.

Nếu bạn luôn muốn đọc từ stdin, sử dụng $*IN.lines:

for $*IN.lines { 
    say "reading ==> $_"; 
} 

Ngoài ra, chúng ta hãy sửa đổi mã của bạn @*ARGS để loại bỏ bất kỳ đối số dòng lệnh mà bạn không muốn được hiểu là tên tập tin, và rồi sử dụng lines().

+1

Tôi hiểu! Cảm ơn các bạn !!! $ * ARGFILES là điều tôi mới học được từ bạn hôm nay. Cảm ơn bạn rất nhiều !! Luôn luôn một cái gì đó mới để tìm hiểu hàng ngày (ngay cả khi tôi không phải trong lĩnh vực công nghệ cao/IT). – lisprogtor

Các vấn đề liên quan