读取单个字符,并在Linux中使用Return as EOL而不是Ctrl-D

时间:2013-08-26 16:54:58

标签: perl input

我是perl的初学者,刚刚开始在我的脚本中阅读用户输入。

chomp(my $inp = <> );

我习惯使用Return键作为其他语言用户输入的终结符,并且不确定如何在按下单个键后停止读取用户输入,或者某些字符后跟Return键。在运行在unix上的perl中,通过菱形运算符捕获输入,似乎需要按Ctrl-D才能输入结束。

我的问题是我想构建一个交互式菜单,向用户显示一个列表并要求按“A”,“B”或“C”。一旦他按下任何这些键,我想根据条件循环,而不是等他按Ctrl D.如何在perl中获得这个级别的交互式用户输入?在C中,我使用getch。在Bash中,我使用read$REPLY

我也想知道如何使用Return键来终止用户输入。

获取单个字符perldoc mentions

if ($BSD_STYLE) {
        system "stty cbreak </dev/tty >/dev/tty 2>&1";
    }
    else {
        system "stty", '-icanon', 'eol', "\001";
    }
    $key = getc(STDIN);
    if ($BSD_STYLE) {
        system "stty -cbreak </dev/tty >/dev/tty 2>&1";
    }
    else {
        system 'stty', 'icanon', 'eol', '^@'; # ASCII NUL
    }
    print "\n";

肯定是像perl这样的语言,它不是that难吗?

编辑:看起来我正在寻找的东西本身不可用。但是,IO :: Prompter似乎是解决方案。

1 个答案:

答案 0 :(得分:1)

菱形运算符在标量上下文中读取一行,在数组上下文中读取一个文件。 Ctrl-D是EOF,Return是EOL。

由于chomp提供了列表上下文,因此您必须将其分解:

my $inp = <>;
chomp $inp;

阅读单个按键的便携方式是Term::Readkey。见http://learn.perl.org/faq/perlfaq5.html#How-can-I-read-a-single-character-from-a-file-From-the-keyboard-