У меня когда-либо возникала проблема с разделителями путей, когда клиент использует MSIE (подразумевает пути Windows). Я использовал довольно простое регулярное выражение, чтобы справиться с этим. Тем не менее, вы можете расширить регулярное выражение (или даже разделить) для обработки наиболее распространенных разделителей пути - '/', '\' и случайных ':'.
Кроме того, вы должны иметь возможность определить тип файловой системы из строки useragent (возможно, используя HTTP :: DetectUserAgent или HTTP :: BrowserDetect ). Учитывая, что вы можете вызвать функцию fileparse_set_fstype в File :: BaseName перед анализом файла.
Что-то вроде:
use File::Basename;
use HTTP::BrowserDetect;
# ... get the filename into $upload_file and agent into $user_agent_string.
my $browser = HTTP::BrowserDetect->new($user_agent_string);
my $ostype;
$ostype = 'MSWin32' if $browser->windows;
$ostype = 'Unix' if $browser->unix;
# There are more tests available.
fileparse_set_fstype($ostype);
my $filename = basename( $upload_file);