return reduce(Math::max);
НЕ РАВНО return reduce(max());
Но это означает, что-то вроде этого:
IntBinaryOperator myLambda = (a, b)->{(a >= b) ? a : b};//56 keystrokes I had to type -_-
return reduce(myLambda);
Вы можете просто сохранить 47 нажатий клавиш если вы пишете так
return reduce(Math::max);//Only 9 keystrokes ^_^
Новый классный способ справиться с этим - использовать Capture :: Tiny . Вы можете использовать его хирургическим путем, чтобы повлиять только на ту часть программы, где вам это нужно, не нарушая ничего другого. Но я бы, вероятно, сделал то, что cjm рекомендует , поскольку для этого не требуется модуль.
Если рассматриваемый код не использует STDOUT явно (т.е. он просто печатает «...»
), вы можете использовать select
, чтобы изменить дескриптор файла, который print
использует:
my $output;
open(my $outputFH, '>', \$output) or die; # This shouldn't fail
my $oldFH = select $outputFH;
call_code_that_prints();
select $oldFH;
close $outputFH;
print $output; # Here's what we collected
Использование select
упрощает последующее восстановление STDOUT. Закрытие и повторное открытие STDOUT сложнее отменить. Обратите внимание, что select
не влияет на сам STDOUT, поэтому он не влияет на внешние процессы, но вы сказали, что у вас их нет. Это также не влияет на код, который делает что-то вроде print STDOUT "..."
.
Если метод select
не подходит для ваших нужд, я рекомендую вам попробовать Capture :: Tiny . Он может захватывать вывод внешних программ и код, который явно записывает в STDOUT. Но он не может (в настоящее время) захватывать только STDOUT; он всегда захватывает как STDOUT, так и STDERR (отдельно или объединенные в одну строку).