#!/usr/bin/env perl
use Term::ReadKey;
ReadMode 4;
END {
ReadMode 0; # Reset tty mode before exiting
}
while (<>) {
$key = ReadKey(0);
$key == "\x04" and last; # Ctrl+D breaks the loop
print $key;
}
當我有它不while循環,它打印回我在打字。這個perl程序爲什麼不打印出來?
它甚至不產生結尾處的輸出(如果它是進行緩衝或東西)。就像我運行它並鍵入幾個字母並按Ctrl + D。它什麼都不打印。我是trying to make a program to convert mouse scroll escape codes into keypresses。我希望我不會咆哮錯誤的樹。
使用'eq'運算符測試字符串相等性。 '=='首先將參數轉換爲數字,通常爲零。如果你把「嚴格使用」,你會被警告過。在腳本的頂部使用警告。 – amon
這可能是真的,我的perl-fu確實很弱,但我幾乎肯定這不是真正的問題。 'echo「abc」| this_program'仍然不會打印任何內容。但是,如果我將循環取出並讀取並打印2個字符的「echo」abc「|」 this_program'實際上會打印出'ab' –
哦,現在我明白了:你用'<>'運算符來讀取整行輸入(包括強制性的'\ n')。然後,你可以用'ReadKey(0)'來讀取一個按鍵,你可以回顯。該行(in'$ _')被丟棄。改變你的循環條件爲'while(定義(my $ key = ReadKey(0))){...}'* * really *'use strict;使用警告;'。 – amon