アプリ版:「スタンプのみでお礼する」機能のリリースについて

Perlをインストールして勉強し始めて数十分のものです
(まだ一時間経っていません)。いま、超簡単なサンプルで勉強中です。

環境はWinにActivePerlをインストールして、
コマンドプロンプトを立ち上げ「Perl ファイル名」とし実行しています。
これをファイルのダブルクリックで実行できるようにしたいと思っています。

というか実際には実行だけはできるのですが、一瞬で終わってしまい
結果の確認が出来ません。これを処理待ちさせて確認できるように
したいのですが、その方法が分かりません。
DOSバッチのpauseとかに相当するものです。

今は分からないので、無限ループで代用していますがショボすぎます。
…と書いているうちに標準入力待ちをするコマンドが分かったので
それを使うようにしました。少しはましになりましたが、
より正統な方法を知りたいです。
あと、一定時間待つコマンドもあとで使うようになるかも
しれないのでこれもあわせて教えてください。


・普通の処理待ちコマンド
・一定時間待つコマンド

これを教えてください。よろしくお願いします。



$xx = 7;
print "答は$xxです\n";
print '答は$xxです\n';
print "\n\n";

print "何か押してください";
$aa = <STDIN>;

A 回答 (3件)

CPANから取ってこなくてもTerm::ReadKeyは標準で入ってますね。



No.2のコードを試したところ、自分の環境では、リターンキーは反応ありませんでしたが、
その他のキーはきちんと応答していました。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/11/06 10:30

秒単位のウェイトならsleep関数でいけますが、ミリ秒以下のウェイトは、


mibusysさんが調べられた方法を取るの一般的だと思います。

ご質問のPerlでのpauseに相当する関数ですが、標準ではないと思います。
CPANで探せばあるとは思いますが、そこまでする必然性があるかというところですね。

例えば、CPANにあるTerm::ReadKeyを用いて、

use Term::ReadKey;

ReadMode 'cbreak';
print '処理が終わりました。任意のキーを押してください。';
ReadKey(0);

とすれば、pauseに相当する動作が得られるかもしれません。
(未検証です)

結局、質問欄に書かれている<STDIN>の方法が一番手軽かもしれません。

私もまだPerlの中級の域にも達していないので、熟練者さんの回答をもう少し待たれて
みてください。
    • good
    • 0
この回答へのお礼

>秒単位のウェイトならsleep関数でいけますが

おぉ。普通にsleepというものもあるのですね。
ありがとうございます。


>ご質問のPerlでのpauseに相当する関数ですが、標準ではないと思います。

無いのですか…。これは大変助けになりました。
あるかないかわからない状態で探し続けるのは大変ですので。


>例えば、CPANにあるTerm::ReadKeyを用いて、
>とすれば、pauseに相当する動作が得られるかもしれません。

これやってみました。大体動きました。
スペースバーや通常の文字を入力すると一発で終了します。
しかしEnterキーの場合、なぜか4回押下しないと終了しません。

「<STDIN>」は記述はシンプルですが、対応キーが少ないので
ReadKey(0);のほうを今後使おうかと思っています。



・sleep関数があること
・pauseに相当する関数は標準ではないこと
・その代替案いくつか

いろいろ勉強になりました。
ありがとうございました。

お礼日時:2009/10/19 10:51

まずは、myperl.batというバッチファイルを作ってください。


このファイルの置き場所はどこでもいいです。

中身は以下です。

-- myperl.bat -----------------
@echo off
perl %*
pause
-------------------------------

次にエクスローラーを立ち上げてください。
(Win+Eで立ち上がります。
WinキーはCtrlキーとAltキーの近くにあるWindowsロゴのキーです。)

エクスプローラーのメニューバーから、ツール → フォルダ オプションを選び、
”ファイルの種類”タブをクリックしてください。

拡張子が”PL”を探し、それを選択してから、[変更]ボタンをクリック。
(拡張子”PL”がなければ、[新規]ボタンをクリックして作成)

次に、[参照]ボタンをクリックし、先ほど作成した”myperl.bat”を選ぶ。
[OK]ボタンをクリックして設定完了。

この回答への補足

もともとの質問は、「他言語のpauseに相当するPerlのコマンドは何か」
という趣旨でした。今回のご回答から判断するに、
「Perlには処理待ちをするコマンドは存在しない」ということなのでしょうか?

この点を明確にしていただきたいです。
よろしくお願いします。

補足日時:2009/10/16 11:01
    • good
    • 0
この回答へのお礼

なるほど。面白い代替案ですね。
ありがとうございました。


あれから自分でも少し調べたのですが
他言語のsleepに該当するコマンドとしては
「Time::HiResモジュール」なるものを使用し
「usleep (マイクロ秒)」と書くか、
「select(undef, undef, undef, 秒数);」
と書くかのどちらかがよく使われるようですね。

ニーズが高いことが分かってるんだったら
コマンド作ればいいのにと思ってしまいました。

お礼日時:2009/10/16 11:01

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