use strict; use warnings; use 5.014; use Win32::Console; use Win32::GUI(); use autodie; use warnings qw< FATAL utf8 >; use Carp::Always; use Win32API::File::Time qw{:win}; use Image::ExifTool qw(:Public); use Date::Parse; # ... my ( $FileName, $ImageDir, $DIR, $TopDir); # ... $TopDir = 'D:\My Documents'; $ImageDir = Win32::GUI::BrowseForFolder( -root => $TopDir, -includefiles => 1,); unless ($ImageDir) { say '$DirName not defined after calling Win32::GUI::BrowseForFolder, ', 'Photo date set line'.__LINE__; exit; } else { say "Identified directory: $ImageDir"; } # now select a file $FileName = Win32::GUI::GetOpenFileName( -title => 'Select an image file', -directory => $ImageDir, -file => "\0" . " " x 256, -filter => ["Image files (*.jpg)" => "*.jpg;*.jpeg", "All files", "*.*", ],); unless ($FileName) { say '$FileName not defined after calling Win32::GUI::GetOpenFileName, ', 'Photo date set line'.__LINE__; } else { say "Identified image file: $FileName"; } # ...