我正在调用一个使用print写入STDOUT的函数.如何在变量中捕获它?
请注意,所有这些都发生在同一个过程中.
如何使用Perl打印到变量?
我一直在研究一个程序,它以高度冗长的方式记录它的迭代进度......
print $loghandle $some_message;
Run Code Online (Sandbox Code Playgroud)
但是,我还想有选择地将一些消息打印到不同的文件中.当然,我可以将代码撒上......
print $loghandle $some_message
print $otherloghandle $some_message
Run Code Online (Sandbox Code Playgroud)
或者将整个业务重写为一个功能.等等.
我想要做的是在打开$ loghandle时做一些魔术,这样当我print正在进行时,我实际上只是sprintf对一个变量进行ish操作(调用它$current_iteration),这样当我做出决定时我能做点什么......
print $real_log_file $current_iteration;
print $other_real_log_file $current_iteration if($condition);
Run Code Online (Sandbox Code Playgroud)
我很确定我在某个地方见过这样的东西,但我不知道它在哪里或在哪里看.
编辑:File :: Tee在某种程度上在*nix上解决了这个问题,但我在Windows上运行.
我的情况是这样的:while循环将检查STDIN,一旦我输入一个包含关键字"win"的行,level0子程序将显示"hahaha我赢了!\n".现在我想将打印的"hahaha I win \n"重定向到名为$ result的变量,而不是将其显示在屏幕上,然后chomp()它,然后在屏幕上显示修改后的信息.
我的预期显示:"哈哈哈,我赢了!结果被重定向"
sub level0 {
print "hahaha I win!\n";
}
sub level1 {
level0();
}
sub check {
my ($word) = @_;
if ($word =~ /win/) {
level1($word);
}
}
while (<>) {
($line) = $_;
$result = check($line);
chomp($result);
print "$result, the result has been redirected\n";
}
Run Code Online (Sandbox Code Playgroud)