0
我有一個腳本,雲基本上是這樣的:獲取用戶輸入的程序循環仍然運行
sub mainLoop {
while (1) {
# Do its thing
}
}
我不認爲邏輯是很重要的話,那基本上是不斷地檢查一臺服務器,並做一些必要時採取行動。但我想確保用戶可以在程序運行時輸入一些命令,如show status
或show foo
。並且打印一些東西,比如它需要採取行動的次數等等。總結起來,它需要從STDIN中讀取而不暫停循環。
我讀了另一個執行此操作的Perl程序的源代碼。但我不知道如果我得到它:
sub mainLoop {
while (1) {
# This is just for the sake of of this example
my $bits = '';
my $line = undef;
vec($bits, fileno(STDIN), 1) = 1;
if (select($bits, undef, undef, 0) > 0) {
$line = <STDIN>;
$line =~ s/\n//g;
}
if ($line) {
# I can work with $line value and call a sub based on its value
}
# Keep on doing its thing
}
}
我沒有得到select()
。它如何變成大於0的值?因爲據我所知$bits
的值是否相同,無論select()
的值是否等於0或大於0.那麼,爲什麼每當我按下ENTER鍵時select返回的值都會變爲1?
我建議你使用[IO :: Select](http://metacpan.org/module/IO::Select)模塊來代替,它將'select'調用包裝在一個更加整潔的API中 – Borodin