Bạn đang tìm cách ghi lại đầu ra trong một biến? Nếu vậy, bạn có sử dụng backticks hoặc qx{}
với chuyển hướng thích hợp. Ví dụ, bạn có thể sử dụng:
#/usr/bin/env perl
use strict;
use warnings;
# Ensure we have a way to write messages
open my $fh, '>', "output" or die;
close(STDOUT);
close(STDERR);
my $out;
open(STDOUT, ">>", \$out) or do { print $fh, "failed to open STDOUT ($!)\n"; die };
open(STDERR, ">>", \$out) or do { print $fh, "failed to open STDERR ($!)\n"; die };
foreach my $i (1..10)
{
print "print $i\n";
warn "warn $i\n";
my $extra = qx{make pth$i 2>&1};
print $fh "<<$i>><<$out>><<$extra>>\n";
}
(tôi xảy ra để có các chương trình pth1, pth2 và pth3 trong thư mục - họ đã được thực hiện OK; pth4 trở lên lỗi ghi vào thiết bị lỗi chuẩn; chuyển hướng là cần thiết.)
Bạn nên luôn kiểm tra sự thành công của các hoạt động như open()
.
Tại sao điều này lại cần thiết? Bởi vì việc viết cho một biến đòi hỏi sự hợp tác của quá trình thực hiện việc viết - và make
không biết cách hợp tác.
Nguồn
2010-12-11 06:24:30
$ out. = Qx {make}; nhưng không nghĩ đây là một cách tốt. – Deck
@Israfil: đó là * cách * để thực hiện. –