In c++, there is a functio, getch(), which returns the variable of the key you pressed - like enter would be 13. How could I do this in perl?
Asked
Active
Viewed 3,958 times
7
-
2don't forget to mark answers to this and your other questions. So far you've marked 2 out of a possible 8. http://stackoverflow.com/faq – Andy E Jun 07 '10 at 11:44
2 Answers
9
You can use Term::ReadKey.

Svante
- 50,694
- 11
- 78
- 122
-
Because for the most part Term::ReadKey is problematic under Windows. I've not used it in some years so this situation may have changed. As I understand it, the source was a bit too tightly bound to Unix and POSIX... – hsmyers Mar 02 '16 at 06:46
4
in short:
$x = ord(getc);
detailed:
$c = getc(STDIN);
$x = ord($c);
from perldoc -f getc
:
"However, it cannot be used by itself to fetch single
characters without waiting for the user to hit enter.
For that, try something more like":
1. if ($BSD_STYLE) {
2. system "stty cbreak </dev/tty >/dev/tty 2>&1";
3. }
4. else {
5. system "stty", '-icanon', 'eol', "\001";
6. }
7.
8. $key = getc(STDIN);
9.
10. if ($BSD_STYLE) {
11. system "stty -cbreak </dev/tty >/dev/tty 2>&1";
12. }
13. else {
14. system 'stty', 'icanon', 'eol', '^@'; # ASCII NUL
15. }
16. print "\n";

Oleg Razgulyaev
- 5,757
- 4
- 28
- 28