電子書籍の厳選無料作品が豊富!

入力待ちにならないようにSTDINを使いたいのですが、
通常はどのような方法を取るのでしょうか?
定期的なチェックが出来るだけで構いません。

普通は別プロセスを立ち上げるのでしょうか?
その時はどのような方法が楽でしょうか?
またプロセス間通信はどのような方法を取るのが一般的ですか?


いくつかの一般化された方法があるなら複数でも構いません。

A 回答 (2件)

表示がくずれるので、空白2文字を全角空白にしていることに注意。



#!/usr/bin/perl
use strict;
use warnings;
use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);

my $flags = fcntl( STDIN, F_GETFL, 0 ) or die "$!";
fcntl( STDIN, F_SETFL, $flags | O_NONBLOCK ) or die "$!";

while (1) {
  my $line = <STDIN>;
  if ( defined $line ) {
    print "Input : ", $line;
  }
  else {
    print "Not Input\n";
  }
  sleep 1;
}

$ perl -w foo.pl
Not Input
Not Input
Not Input
Not Input
aaaa  <- 要リターン
Input : aaaa
Not Input
Not Input
 C-c C-c
    • good
    • 0
この回答へのお礼

ありがとうございます。
記述を見る限り私の要望に沿っていると思いますが、
Your vendor has not defined Fcntl macro F_GETFL
と出力されてしまいます。

モジュールの使い方についてはこれから調べようと思います。

お礼日時:2012/09/14 04:22

一般的には、方法はありません。


STDIN = キーボードでは無いからです。

そういうキー入力に対応したモジュールを使うのが一般的でしょう。
UNIXのCUIでよく使われる ncursesとか
GUI用のQtだのGtkだのからキー入力だけ使うとか
WindowだったらWindowAPIでキーコード調べるとか
    • good
    • 0
この回答へのお礼

ありがとうございます。
キー入力ではなくプロセス間通信です。

お礼日時:2012/09/14 04:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!