diff --git a/ghc/driver/ghc-iface.lprl b/ghc/driver/ghc-iface.lprl
index 02c079391e47b4ec188aa3ccec5c082cb2e88161..491b2af7f9cb5538fc4a0b309c48646884c15392 100644
--- a/ghc/driver/ghc-iface.lprl
+++ b/ghc/driver/ghc-iface.lprl
@@ -124,9 +124,9 @@ sub constructNewHiFile {
 
     &readHiFile('new',$hsc_hi)	      unless $HiHasBeenRead{'new'} == 1;
     if ($Specific_hi_file eq '') {  # -ohi is used even if  module name != stem of filename.
-        ($hiname = $hifile_target) =~ s/([^\/]*\/)*(.*)\.$HiSuffix/$2/;
+        ($hiname = $hifile_target) = $1 if  $hifile_target =~ /\/?([^\/\.]+)\.$HiSuffix/;
         if ($ModuleName{'new'} ne $hiname) {
-          ($hidir  = $hifile_target) =~ s/([^\/]*\/)*.*\.$HiSuffix/$1/;
+          ($hidir  = $hifile_target) =~ s/(.*)$hiname\.$HiSuffix/$1/;
 	  $hifile_target = $hidir . $ModuleName{'new'} . ".$HiSuffix";
         }
     }