Tag alex.
{-disabled=>$disabled}
klingt zwar vielversprechend, doch auch für undef liefert dies mir ein ausgegrautes feld, ich will aber nur ein ausgegrautes feld, sofern $disabled == "disabled"...
Ja, so muss das auch sein:
"If the first argument is an associative array reference, then the keys and values of the associative array become the HTML tag's attributes." Auszug aus CGI.pm).
Das heißt, sobald du einen Parameter angibst, wird er dem Element hinzugefügt. Ist der Wert "undef", wird eben nur der Name des Parameters zum (leeren) HTML-Attribut, mit den Folgen wie du sie beobachtet hast. Ergo: Warum lässt du es nicht einfach weg, wenn du es nicht brauchst?
Kleiner Tipp am Rande: du kannst der Methode auch einen anonymen Hash übergeben:
my $attribs = { -name => 'foo', -value => 'bar' };
if($disabled == 1) {
$$attribs{-disabled} = 'disabled';
}
print textfield ($attribs);
Wenn also die Variable $disabled den Wert 1 hat, dann wird das Attribut angehängt, sonst nicht.
Siechfred