Sie möchten mit Hilfe eines Perlscripts die Farbeinstellungen der Windows-Konsole für die Ausgabe verändern und danach wieder auf den Standardwert zurücksetzen.
use strict; use diagnostics; use Win32::Console; my %colors = ( '0' => 'Schwarz', '1' => 'Dunkelblau', '2' => 'Dunkelgruen', '3' => 'Blaugruen', '4' => 'Dunkelrot', '5' => 'Violett', '6' => 'Ocker', '7' => 'Hellgrau', '8' => 'Dunkelgrau', '9' => 'Blau', 'A' => 'Gruen', 'B' => 'Zyan', 'C' => 'Rot', 'D' => 'Magenta', 'E' => 'Gelb', 'F' => 'Weiss' ); my $console = Win32::Console->new(STD_OUTPUT_HANDLE); my $default_dec = $console->Attr(); my $default_hex = sprintf "%02X", $default_dec; my @color = split //, $default_hex; print 'Standardeinstellungen: ', $colors{$color[1]}, ' auf ', $colors{$color[0]}, "\n"; $console->Attr($FG_BLUE | $BG_YELLOW); my $neu_dec = $console->Attr(); my $neu_hex = sprintf "%02X", $neu_dec; @color = split //, $neu_hex; print 'Neue Einstellungen: ', $colors{$color[1]}, ' auf ', $colors{$color[0]}, "\n"; $console->Attr($default_dec);
Zum Einsatz kommt das Modul Win32::Console, das dem Anwender Zugriff auf alle Funktionen der Windows-Konsole erlaubt.
Im ersten Schritt wird die Methode Attr() verwendet, die ohne Parameter aufgerufen die Anzeigeinformation als Dezimalzahl zurückgibt. Diese wird mit Hilfe von sprintf() in eine Hexadezimalzahl umgewandelt. Dabei ist zu beachten, dass ein schwarzer Hintergrund den Farbwert 0 hat, sodass bei dezimaler Schreibweise nur die Vordergrundfarbe zurückgegeben wird (Dezimalzahlen kennen keine führenden Nullen).
Anhand eines Hashes mit den Windows-Farbwerten wird die Farbkombination zur Kontrolle ausgegeben.
Mit Hilfe der Methode Attr() und den vom Modul zur Verfügung gestellten Farbkonstanten wird die Anzeige auf "Blau auf Gelb" umgestellt. Zur Kontrolle wird auch hier die Farbkombination im Klartext angezeigt.
Zum Schluss wird die Anzeige mit Hilfe von $default_dec auf den Ausgangswert zurückgestellt.
Sie können einzelne Textpassagen auch mit Hilfe der ANSI-Escapesequenzen farbig darstellen, verwenden Sie dafür das Modul Win32::Console::ANSI.