let which ?(path) fln =
    let real_path =
      match path with
        None ->
        path_of_string (Sys.getenv "PATH")
      | Some x ->
        x
    in
    let ctst x = 
      test (And(Is_exec,Not(Is_dir))) 
        (concat x fln)
    in
    let which_path =
      List.find ctst real_path
    in
    concat which_path fln