2010-07-14 16 views

Trả lời

1

Có, bạn có thể sử dụng một ống như thế này:

open(my $pipe, "ls|") or die "Cannot open process: $!"; 
while (<$pipe>) { 
    print; 
} 

Xem tài liệu cho open để biết thêm thông tin, và perlipc cho một mô tả đầy đủ hoạt động đường ống.

+4

Hai arg 'open' là cũ và crufty (và nguy hiểm tiềm tàng). [Sử dụng phiên bản ba arg thay thế] (http://www.modernperlbooks.com/mt/2010/04/three-arg-open-migrating-to-modern-perl.html) – Daenyth

12

Dưới đây là một ví dụ về việc thiết lập đường ống giữa kịch bản của bạn và các lệnh khác, sử dụng các hình thức 3 đối số của open:

open(my $incoming_pipe, '-|', 'ls -l')    or die $!; 
open(my $outgoing_pipe, '|-', "grep -v '[02468]'") or die $!; 

my @listing = <$incoming_pipe>;   # Lines from output of ls -l 
print $outgoing_pipe "$_\n" for 1 .. 50; # 1 3 5 7 9 11 ...