Haskellのモナドのdo記法っぽい書き方出来ないかと思ったけど…ジェネレータもないなら例外を経由しつつ隠蔽するしかないのかな
命名とかモナド則とか全然考えてないけど

sub run_maybe(&) {
  my ($block) = @_;
  my $value = eval { $block->() };
  if (my $e = $@) {
    # 例外がNothingなら戻り値に、それ以外は再スロー
    return $e if is_nothing($e);
    die $e;
  }
  return just($value);
}

sub bind {
  my ($maybe) = @_;
  # Nothingならそれを例外として投げ、そうでないなら中身の値をリターン
  ...;
}

my $maybe_int = run_maybe {
  my $x = bind foo();
  my $y = bind bar();
  return $x + $y;
};