- my @dirs = reverse File::Spec->splitdir($dir);
- shift @dirs;
- $dir = File::Spec->catdir(reverse @dirs);
- $system_dir = File::Spec->catdir($dir, 'SL', 'System');
- return File::Spec->curdir unless -d $system_dir && -f File::Spec->catfile($system_dir, 'TaskServer.pm');
+ $cached_exe_dir = first { -f File::Spec->catdir(@dirs[0..$_], 'SL', 'System', 'TaskServer.pm') }
+ reverse(0..scalar(@dirs) - 1);
+ $cached_exe_dir = defined($cached_exe_dir) ? File::Spec->catdir(@dirs[0..$cached_exe_dir]) : File::Spec->curdir;