use threads; use threads::shared; ... my $filename :shared; async { $filename = OpenDialog( ... ); }->detach; DoOneEvent( 1 ) until $filename; ## use $filename