Not such a big deal for parsing `PATH`, but in general doing a recursive call inside a `try ... with` is not a good idea as it break tail recursion. Fortunately 4.02 has a new construction for this:

```ocaml
   match String.index_from str pos sep with
   | newpos -> ...
   | exception Not_found -> ...
```