8

次があるとします。

sub test {
        print "testing\n";
}

stdout ではなく stderr に出力したい場合、サブルーチンを呼び出してこれを行う方法はありますか? または、出力を変数にキャプチャしてから warn を使用できますか? 私はperlにかなり慣れていません。

4

4 に答える 4

3

一方、「サブルーチンの印刷出力を変数にキャプチャする」こともできます。

にスカラー参照を渡すだけ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<<<
于 2013-05-18T02:44:22.317 に答える