sub myGlobalInit ... do things ... and ... $globalInitialDir = a value; $globalSelectedDir = a value; $globalMyWindow = Tk::MainWindow->new; end sub sub myGlobalaskforFile ... if defined ($globalInitialDir) # user not specified any preference - use our default localInitDir = globalInitialDir filename = globalMyWindow -> getOpenFile (-initialdir => $localInitDir ) else if defined ($globalSelectedDir) # use what the user has selected before as our 'base' localInitDir = globalSelectedDir filename = globalMyWindow -> getOpenFile (-initialdir => $localInitDir ) return filename end sub In project modules ... myGlobalInit(); # set up a default for globalInitialDir that differs from the default set up in the above call $globalInitialDir = some value that I specify file = myGlobalaskForFile () ...