2008-04-04から1日間の記事一覧
STDINとSTDOUTに端末を通じてアクセスすることが前提になっているフルスクリーンプログラムの対話型操作を自動化したい。 CPANのExpectモジュールを使用する。 use Expect; $command = Expect->spawn("program to run") or die; # プログラムの出力がSTDOUT…
画面のレイアウトや強調表示の制御、特殊キーが押された場合の検出、フルスクリーンメニューの表示などを行いたい。ただし、ユーザがどのような種類のディスプレイデバイスを使用しているかについては配慮する必要を無くしたい。 CPANのCursesモジュールを使…
ユーザが入力行を送信してプログラムに読み取らせる前に、その入力行をユーザ自身が編集できるようにしたい。 Term::ReadLineモジュールを使用する。 use Term::ReadLine; $term = Term::ReadLine->new("APP DESCRIPTION"); $OUT = $term->OUT || *STDOUT; $…
キーボードからの入力を読み取るときに、そのキーの入力が画面にエコーされないようにする。 CPANのTerm::ReadKeyモジュールを使用して、その入力モードをnoechoに設定した後で、ReadLineを使用する use Term::ReadKey; ReadMode('noecho'); $password = Rea…
キーボードからの入力が実際に読み取られずに待機状態になっているかどうかを検査したい。 CPANのTerm::ReadKeyモジュールを使用して、引数として-1を渡すことによって、非ブロックモードによるキーの読み取りを試みる。 use Term::ReadKey; ReadMode ('cbre…
端末の特性を直接設定したい POSIXモジュールのtermiosインターフェースを使用する
"\a"文字を出力する print "\aWake Up!\n"; "vb"端末機能を使用して、ビジュアルレベルを表示する use Term::Cap; $OSPEED = 9600; eval { require POSIX; my $termios = POSIX::Termios->new(); $termios->getatt; $OSPEED = $termios->getospeed; }; $term…
1文字のキーを押して選択するメニューを表示した場合に、ユーザが文字キーの後でEnterキーを押さなくても選択できるようにする。 CPANのTerm::ReadKeyモジュールを使用して、端末をcbreakモードに切り替える use Term::ReadKey; ReadMode 'cbreak'; $key = R…
CPANのTerm::ANSICorlorモジュールを使用して、ANSIの色変更シーケンスをユーザの端末に送信する。 use Term::ANSIColor; print color("red"), "Danger, Will Robinson!\n", color("reset"); print "This is just normal text.\n"; print colorred("<BLINK>Do you h</blink>…
CPANのTerm::ReadKeyモジュールを使用する。 use Term::ReadKey; ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
Term::Capモジュールを使用して、適切な文字シーケンスを送信する。 use Term::Cap; $OSPEED = 9600; eval { require POSIX; my $termios = POSIX::Termios->new(); $termios->getattr; $OSPEED = $termios->getospeed; }; $terminal = Term::Cap->Tgetent({…
プログラムが対話的に実行されているかどうか知りたい。例えば、プログラムがシェルから実行されている場合は対話的であり、プログラムがcronから呼び出されている場合は対話的でない。 -tを使用してSTDINとSTDOUTをテストする sub I_am_interactive { retur…
標準モジュールGetopt::Stdを使用して、1文字オプションを使用する。 use Getopt::Std; # -v ARG, -D ARG, -o ARGに基づいて、$opt_v, $opt_D, $opt_oを設定する getopt("vDo"); # -v ARG, -D ARG, -o ARGに基づいて、$args{v}, $args{D}, $args{o}を設定す…