Конечно, с блоком do {}
:
use strict;
use warnings;
sub fetch { 'please find me' }
sub job { print @_, "\n" }
job( do { $_ = fetch(); s/find/replace/g; $_ } );
Причина в том, что в Perl вы не можете сделать fetch() =~ s/find/replace/;
:
Can't modify non-lvalue subroutine call in substitution (s///) at ...
В Perl 5.14 будет введен флаг /r
(который заставит регулярное выражение возвращать строку с подстановками, а не количество подстановок) и уменьшит вышеприведенное до:
job( do { $_ = fetch(); s/find/replace/gr; } );
отредактировано благодаря FM: можно сократить вышеуказанное до:
job( map { s/find/replace/g; $_ } fetch() );
И как только Perl 5.14 выйдет, его можно сократить до:
job( map { s/find/replace/gr } fetch() );