作者: nobu.nakada
日時: 2003/12/11(21:08)
なかだです。

At Thu, 11 Dec 2003 20:11:06 +0900 (JST),
ねこ丸 wrote:
>   最近書いていた Perl スクリプトで
> 
>   print "○○は××されます。よろしいですか? ( yes / no ) ";
>   $answer = <STDIN>;
>   ...
>   ...
> 
>   みたいなものを使ったのですが、「キーボードからの入力の終了が Ctrl + D 
> しないと検出されない」というなんかかっこ悪いものになってしまいました。

Enterで終了しましたが。

$ perl -e 'print "ok? "; $a = <STDIN>; print $a'
ok? y
y

>   ですよね。これを while ( line = STDIN.gets ) にしたところ(かっこは気
> 分です)、このスクリプトに引数で与えたファイルを読むのではなく、キーボー
> ドからの入力を待つ動作になりました。

STDINはその名の通り標準入力ですから、スクリプトへの引数とは無関
係です。

>   これは「こういうもの」なんでしょうけど、Perl のように <> という目に見
> えるものがないのがちょっと気持ち悪いんです。(gets がそれだと言われれば
> そうなんですけど、gets は誰のメソッドやねんちゅー話です。)<> の代わりに
> なるようなものは何もないのでしょうか?

ARGF.each do |line|
  ...
end

while line = ARGF.gets
  ...
end

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦