Lange überlegt. Legacy CGI.pm nutzt u.a. Obverlod, d.h., der Name einer hochgeladenen Datei und das dazugehörige Dateihandle steckt in einundderselben Variablen welche die param()-Methode liefert.
Ich habs ein bischen anders gemacht:
Neu gegenüber CGI.pm
Ist, daß die param()-Methode Instanzen der Klasse xCGI::File liefert, was die weitere Verarbeitung hochgeladener Dateien bestimmt. Beispiel:
# Skalarer Kontext liefert das 1. Dateiobjekt
my $file = $self->param('upspot');
# Getter-Methoden für Attribute
$file->content_type;
$file->content_length;
# Original Filename
$file->filename;
# Dateiinhalt, Overload
my $content = $file;
Meine ersten Überlegungen gingen auch dahin, es so zu machen wie PHP, also für hochgeladene Dateien ein dediziertes Array $FILE anzulegen. Da jedoch die Logik nicht das Array befragt sondern den Namen des <input type=file name=upspot>-Feld auf die param() Methode umlegt, macht ein dediziertes Array keinen Sinn und verbleibt somit als Interna. Wenn schon modern dann OOP und wenn schon OOP dann richtig 😉
Trotzdem gewähre ich hier einen Einblick hinter die Kulissen.
MfG