Windows コマンド コンソールに書き込む次のコードがあります。
use Win32::Console;
my $console = new Win32::Console(Win32::Console::STD_ERROR_HANDLE());
my $defaultAttribute = $console->Attr();
my $defaultFG = ($defaultAttribute & 0x0F);
my $defaultBG = ($defaultAttribute & 0xF0);
$console->Attr($defaultBG | $Win32::Console::FG_LIGHTGREEN);
$console->Write("blah blah");
$console->Attr($defaultAttribute);
ユーザーがスクリプトを呼び出すときに STDERR をリダイレクトすると、このコードは失敗します。
perl myscript.pl 2> foo
ユーザーがどのようなリダイレクトを行っても問題にならないように、標準ハンドルのいずれかを参照せずに、プロセスが接続されている Win32 コンソールへのハンドルを取得するにはどうすればよいですか?
time
私が望む効果は、bash 組み込みコマンドと同様の方法で、リダイレクトに関係なく、通常のプログラム出力の直後にコンソールにメッセージを書き込めるようにすることです。/dev/tty
基本的に、Unix で開いて書き込むのと同じです。
my $console = new Win32::Console()
新しいコンソールを割り当てようとしました$console->Display()
が、これは完全に間違っています。