次があるとします。
sub test {
print "testing\n";
}
stdout ではなく stderr に出力したい場合、サブルーチンを呼び出してこれを行う方法はありますか? または、出力を変数にキャプチャしてから warn を使用できますか? 私はperlにかなり慣れていません。
一方、「サブルーチンの印刷出力を変数にキャプチャする」こともできます。
にスカラー参照を渡すだけopen
です:
#! /usr/bin/env perl
use common::sense;
use autodie;
sub tostring (&) {
my $s;
open local *STDOUT, '>', \$s;
shift->();
$s
}
sub fake {
say 'lalala';
say 'more stuff';
say 1 + 1, ' = 2';
say for @_;
}
for (tostring { fake(1, 2, 3) }) {
s/\n/\\n/g;
say "Captured as string: >>>$_<<<";
}
出力:
Captured as string: >>>lalala\nmore stuff\n2 = 2\n1\n2\n3\n<<<