2008-04-04から1日間の記事一覧

15.13 Expectで他のプログラムを制御する

STDINとSTDOUTに端末を通じてアクセスすることが前提になっているフルスクリーンプログラムの対話型操作を自動化したい。 CPANのExpectモジュールを使用する。 use Expect; $command = Expect->spawn("program to run") or die; # プログラムの出力がSTDOUT…

15.12 画面を制御する

画面のレイアウトや強調表示の制御、特殊キーが押された場合の検出、フルスクリーンメニューの表示などを行いたい。ただし、ユーザがどのような種類のディスプレイデバイスを使用しているかについては配慮する必要を無くしたい。 CPANのCursesモジュールを使…

15.11 入力を編集する

ユーザが入力行を送信してプログラムに読み取らせる前に、その入力行をユーザ自身が編集できるようにしたい。 Term::ReadLineモジュールを使用する。 use Term::ReadLine; $term = Term::ReadLine->new("APP DESCRIPTION"); $OUT = $term->OUT || *STDOUT; $…

15.10 パスワードを読み取る

キーボードからの入力を読み取るときに、そのキーの入力が画面にエコーされないようにする。 CPANのTerm::ReadKeyモジュールを使用して、その入力モードをnoechoに設定した後で、ReadLineを使用する use Term::ReadKey; ReadMode('noecho'); $password = Rea…

15.9 待機状態の入力を検査する

キーボードからの入力が実際に読み取られずに待機状態になっているかどうかを検査したい。 CPANのTerm::ReadKeyモジュールを使用して、引数として-1を渡すことによって、非ブロックモードによるキーの読み取りを試みる。 use Term::ReadKey; ReadMode ('cbre…

15.8 POSIX termiosを使用する

端末の特性を直接設定したい POSIXモジュールのtermiosインターフェースを使用する

15.7 端末のビープ音を制御する

"\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…

15.6 キーボードから1文字を読み取る

1文字のキーを押して選択するメニューを表示した場合に、ユーザが文字キーの後でEnterキーを押さなくても選択できるようにする。 CPANのTerm::ReadKeyモジュールを使用して、端末をcbreakモードに切り替える use Term::ReadKey; ReadMode 'cbreak'; $key = R…

15.5 テキストの色を変更する

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>…

15.4 端末またはウィンドウのサイズを判定する

CPANのTerm::ReadKeyモジュールを使用する。 use Term::ReadKey; ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();

15.3 画面を消去する

Term::Capモジュールを使用して、適切な文字シーケンスを送信する。 use Term::Cap; $OSPEED = 9600; eval { require POSIX; my $termios = POSIX::Termios->new(); $termios->getattr; $OSPEED = $termios->getospeed; }; $terminal = Term::Cap->Tgetent({…

15.2 プログラムが対話的に実行されているかどうか判定する

プログラムが対話的に実行されているかどうか知りたい。例えば、プログラムがシェルから実行されている場合は対話的であり、プログラムがcronから呼び出されている場合は対話的でない。 -tを使用してSTDINとSTDOUTをテストする sub I_am_interactive { retur…

15.1 プログラムの引数を解析する

標準モジュール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}を設定す…