2011-01-10 56 views
8

Làm cách nào tôi có thể thực thi lệnh ngoài và nắm bắt đầu ra của nó trong Perl6?Làm thế nào để thực hiện một lệnh bên ngoài và nắm bắt đầu ra của nó trong perl6?

Perl5 kiểu back-ve dường như không làm việc:

> my $results = `ls`; 
Confused at line 1, near "my $results" 

Synopsis 16 tài liệu các chạy phương pháp, nhưng điều này sẽ trả về trạng thái thoát chứ không phải là đầu ra từ stdout.

Tôi đang sử dụng triển khai Rakudo (rakudo-star-2010.12).

Trả lời

11

Sử dụng qqx hoặc qx thay vào đó, ví dụ:

> my $results = qqx{ls}; 

Larry Wall answered một câu hỏi tương đương trên một mailing list:

[...]

: Có gì thay thế backtick hoặc qx {}?

qqx [] hoặc qq: x [] sẽ chính xác là tương đương. qx [] hoặc q: x [] sẽ là giống với ngữ nghĩa đơn. (Có lẽ không backticks cho mục đích đó vì chúng ta đang đặt ' cho các công cụ người dùng định nghĩa, và vì backticks là trực quan rất khó để kể từ dấu nháy đơn trong nhiều phông chữ.)

+0

Tôi đã tìm thấy câu trả lời ngay trước khi đăng câu hỏi, nhưng vẫn đăng câu hỏi trong trường hợp nó hữu ích cho người khác. – mattbh

0

này cũng có thể được thực hiện một cách an toàn (mà không cần chạm một vỏ) sử dụng run() với tham số out:

my $proc = run 'ls', q!/tmp/"This" is an ugly name, isn't it?/!, :out; 
my $output = $proc.out.slurp-rest; 

Thông tin chi tiết có sẵn trong Proc class.

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