Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید



15.6. Reading Single Characters from the Keyboard


15.6.1. Problem




You want to read a single character from
the keyboard. For instance, you've displayed a menu of one-character
options, and you don't want to require users to press the Enter key
to make their selection.

15.6.2. Solution


Use the CPAN module Term::ReadKey to put the terminal into
cbreak mode, read characters from
STDIN, and then put the terminal back into its
normal mode:

use Term::ReadKey;
ReadMode 'cbreak';
$key = ReadKey(0);
ReadMode 'normal';

15.6.3. Discussion


Term::ReadKey can put the terminal into many
modes—cbreak is just one of them.
cbreak mode makes each character available to your
program as it is typed (see
Example 15-1). It also
echoes the characters to the screen; see Recipe 15.10 for an example of a mode that does not echo.

Example 15-1. sascii


#!/usr/bin/perl -w
# sascii - Show ASCII values for keypresses
use Term::ReadKey;
ReadMode('cbreak');
print "Press keys to see their ASCII values. Use Ctrl-C to quit.\n";
while (1) {
$char = ReadKey(0);
last unless defined $char;
printf(" Decimal: %d\tHex: %x\n", ord($char), ord($char));
}
ReadMode('normal');

Using cbreak mode doesn't prevent the terminal's
device driver from interpreting end-of-file and flow-control
characters. If you want to be able to read a real Ctrl-C (which
normally sends a SIGINT to your process) or a
Ctrl-D (which indicates end-of-file under Unix), you want to use
raw mode.

An argument of 0 to ReadKey
indicates that we want a normal read using getc.
If no input is available, the program will pause until there is some.
We can also pass -1 to indicate a non-blocking
read, or a number greater than 0 to indicate the
number of seconds to wait for input to become available; fractional
seconds are allowed. Non-blocking reads and timed-out reads return
either undef when no input is available or a
zero-length string on end-of-file.

Recent versions of Term::ReadKey also include limited support for
non-Unix systems.

15.6.4. See Also


The getc and sysread functions
in Chapter 29 of Programming Perl, and in
perlfunc(1); the documentation for the
Term::ReadKey module from CPAN;
Recipe 15.8;
Recipe 15.9



15.5. Changing Text Color15.7. Ringing the Terminal Bell




Copyright © 2003 O'Reilly & Associates. All rights reserved.

/ 875