ну блин. 

 в вашем примере откуда, на ваш взгляд, берется $CGI::POST_MAX, которая сравнивается с $ddt? Должно-то оно браться из формы, отправленной методом пост.
а этот пример кода не работает с формой. 

тогда уже натравите stat на свой $filename="3232ff.jpg"; и сравнивайте полученое значение в байтах с $ddt. но это ведь не то, чего вам хочется. верно?
каким-то образом нам нужно узнать размер файла до того, как мы его закачали.
if (not sysopen FILE, "$dir/$1", O_EXCL | O_CREAT | O_WRONLY, 0444 or $CGI::POST_MAX > $ddt) заменить на ее первоначальное состояние:
if (not sysopen FILE, "$DIR/$1", O_EXCL | O_CREAT | O_WRONLY, 0444)
это ошибочная конструкция была. 
 
  -- проблему того, что $CGI::POST_MAX "it will immediately exit with an error message" в той же документации предложено решать так:
$uploaded_file = param(\'upload\');
   if (!$uploaded_file && cgi_error()) {
      print header(-status=>cgi_error());
      exit 0;
   }
возможно еще кто-то поделится своими мыслями. 
