4 Stimmen

Warum verwendet das Perl-CGI-Modul Bindestriche, um benannte Argumente einzuleiten?

Ich bin ein Neuling. Meine Frage ist, wofür das "-" vor den Schlüsseln (Typ, Name mit Ablaufdatum usw.) steht? Warum nicht einfach die einfache Hashtabelle verwenden und den Bindestrich weglassen?

# #!/usr/local/bin/perl -w
use CGI; 
$q = CGI->new; 
print $q->header(-type=>'image/gif',-expires=>'+3d');
$q->param(-name=>'veggie',-value=>'tomato');

9voto

tszming Punkte 2072

Der Autor hat bereits erklärt in der Dokumentation .

Die meisten CGI.p Argumente, manchmal bis zu 20 optionale Argumente! Um dies zu vereinfachen Schnittstelle zu vereinfachen, verwenden alle Routinen ein benanntes Argumente, die wie folgt aussehen so:

drucken $q->header(-type=>'image/gif',-expires=>'+3d');

Jedem Argumentnamen geht ein Bindestrich. Weder Groß- und Kleinschreibung noch Reihenfolge spielen eine Rolle in der Argumentliste. -type, -Type, und -TYPE sind alle zulässig. In Tatsächlich muss nur das erste Argument mit einem Bindestrich beginnen. Wenn ein Bindestrich im ersten Argument vorhanden ist, nimmt CGI.pm [ ] Argumente.

Mehrere Routinen werden üblicherweise aufgerufen mit nur einem Argument aufgerufen. Im Fall dieser Routinen können Sie die einzelne Argument ohne einen Argument Namen angeben. header() ist zufällig eine dieser dieser Routinen. In diesem Fall ist das einziges Argument die Dokumentart.

print $q->header('text/html');

7voto

Sinan Ünür Punkte 114993

Véase perlop :

Wenn der Operand ein Bezeichner ist, wird eine Zeichenkette zurückgegeben, die aus einem Minuszeichen und dem Bezeichner besteht. Andernfalls, wenn die Zeichenfolge mit einem Plus oder Minus beginnt, wird eine Zeichenfolge zurückgegeben, die mit dem entgegengesetzten Zeichen beginnt. Eine Auswirkung dieser Regeln ist, dass -bareword ist gleichbedeutend mit der Zeichenkette "-bareword" . (Hervorhebung von mir)

2voto

Yobert Punkte 485

Dies ist nur ein älterer Stil von Perl-Argumenten, der in neueren Modulen normalerweise nicht mehr verwendet wird. Es ist nicht wirklich veraltet, es ist nur ein älterer Stil, der darauf basiert, dass Perl Ihnen erlaubt, Ihre Hash-Schlüssel nicht zu zitieren, wenn sie mit einem Bindestrich beginnen.

0voto

Colin Fine Punkte 3316

Ich weiß nicht, was Sie mit dem "einfachen hashtable way" meinen. So wie CGI::pm implementiert ist, muss den Namen von Eigenschaften (in den meisten Fällen) ein '-' vorangestellt werden, vermutlich, damit sie identifiziert werden können.

Oder anders ausgedrückt, der Hash-Schlüssel, den CGI::header benötigt, um die Eigenschaft "type" zu identifizieren, ist "-type".

So ist CGI.pm nun einmal definiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X