||=とdoを使ってキャッシュ

たとえばメンバ変数にオブジェクトとかをキャッシュするときに、

 sub method {
     my $self = shift;
     return $self->{hoge_obj} ||= Hoge->new;
 }

とか良くやるんだけど、前処理とかが必要な場合はdo使って

 sub method {
     my $self = shift;
     return $self->{hoge_obj} ||= do {
         
         ### 前処理
         
         Hoge->new;
     };
 }

こんな感じで良くやるんだけどもコレって一般的なのかな?

前にどっかのソースで、

 sub method {
     my $self = shift;
     my $code = sub {
         
         ### 前処理
         
         return Hoge->new;
     };
     return $self->{hoge_obj} ||= $code->();
 }

っていう感じのを見たんだけどどっちがいいんだろーか。

僕的にはdoの方が余計な処理をしないので好きなんだけども。