Thread The Perl Jam 2 (24 answers)
Opened by Raubtier at 2015-12-17 14:04

topeg
 2015-01-03 20:35
#183370 #183370
User since
2006-07-10
2611 articles
BenutzerIn

user image
CGI.pm speichert intern alle Werte zu einem Parameter in einem HoA. Ist nun der erste Wert zu einem Parameter "ARGV" und der zweite Wert eine Datei (beides als POST-Parameter), so gibt $cgi->upload('<Parameter>') "true" (nicht leere Liste von Filehandles) zurück, ( if($cgi->upload('<Parameter>')){ ... } ) weil ein Wert halt eine Datei ist, aber $cgi->param('<Parameter>') gibt "ARGV" zurück. Nun wäre das nicht so wild wenn nicht <ARGV> und $x='ARGV'; <$x> für Perl das gleiche wäre. Es wird nun alles geöffnet was in @ARGV als Datei erkannt wird. Und üblicherweise steht in bei einem CGI-Script in @ARGV die GET-Parameter. Wenn nun in @ARV noch "<programm> |" steht wird das entsprechende Programm gestartet.

ABER

Das ganze Problem löst sich in Wohlgefallen auf wenn man CGI.pm wie vorgesehen benutzt, indem man nur das als Filehandle benutzt was von $cgi->upload('<Parameter>') zurück gegeben wird. So ist es in CGI.pm dokumentiert und empfohlen. Also so
Code (perl): (dl )
1
2
3
4
if (my $fh = $cgi->upload('upload')) {
  local $/ = undef;
  $var = <$fh>;
}
hat man keine Probleme.

View full thread The Perl Jam 2