プロが教える店舗&オフィスのセキュリティ対策術

Perlを勉強中、以下(注1)の内容をhello.plに記述して
MS-DOSでperl hello.plとタイプしました。そしたらC:\Perl>が
消えて、左端にカーソルが点滅するだけになってしまいした。
MS-DOSの右上にある x ボタンを押して終了しようとすると、
以下(注2)のダイアログが、出てしまいます。
EXITと入力しても、下の行にEXITと表示されるだけで終了できません。
また、タイトルバーがPERLになっているのはなぜなんでしょう?
ご存知の方いましたら、お願いします。

Windows 98

IE 5.5

SHARP Mebius MJ-10

注1

for ($i = 0; $i <= $#ARGV; $i++) {
open(IN, $ARGV[$i]);
while (<IN>) {
print;
}
close(IN);
}

注2

PERL

このプログラムを自動的にシャットダウンすることはできません。
プログラムの終了コマンドを使ってください。

プログラムで頻繁にエラーが発生する場合は、[スタート]メニューの[ヘルプ]を選び、
トラブルシューティングの「MS-DOSに関する問題」を参照してください。

A 回答 (4件)

えーっと、これで全文ですか?


これより前にファイル名を設定している部分があると思うのですが…

例えば、ファイル名が"con"などとなってませんか?

試しに、Ctrl+Zキーを入力してみてください。
これで元の画面に戻るようでしたら、「ファイルを読み込む」代わりに「ユーザからの入力」を読み取ってしまってるのが原因ですね。

きちんと存在するファイルの名前を指定してやれば、うまく動くと思いますよ。

あと、これは蛇足になりますが、open…の行を
open(IN, $ARGV[$i]) || die "Can't open file: $!";
などとすると、存在しないファイル名を指定したときとかにエラーを表示してくれますよ。
|| die …
を付けないと、場合によってはデバッグが困難になります。

この回答への補足

Ctrl + Z を押したら C:\Perl に戻りました。ありがとうございます。
MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか?
昨日まで、 x(閉じるボタン) で終了していました。

補足日時:2001/12/11 08:08
    • good
    • 0

>MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか?



プログラムが動いている状態では、ばつで閉じようとすると警告が出ます。

コマンドコンソールと同じようにカーソルが点滅しているだけでも、この場合perlが実行状態だったので、警告が表示されたのでしょう。

今回の場合[CTL-Z]で対応できたようですが[CTL-C]も覚えておいた方が良いかも。
[CTL-Z]:ファイルの終了を表すEOFを送る。
[CTL-C]:標準入出力中にPGを強制終了する。
    • good
    • 0
この回答へのお礼

Ctrl + Z を押したらタイトルバーが PERL から MS-DOS プロンプトに戻りました。
ありがとうございました。

お礼日時:2001/12/11 20:01

>MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか?



C:\>などのプロンプトが表示されている状況では×でいいですが、今回の場合、まだPerlが動作中なんです。
キーボードから入力できるとありますが、これは、Perlがキーボードからの入力を受け取っているっていう状態なのです。

つまり
while (<IN>) {
print;
}
の部分がまだ実行中なんですね。

<IN>に、キーボードからの入力が割り当てられている為、
1:「while (<IN>){」でキーボードからの入力を受け取る
2:「print;」で、それを画面に表示する。
3:「}」で1:に戻る

というプログラムがずっと動いているわけです。(だからタイトルバーが「Perl」になっているのです。)

で、<IN>に何らかのファイルが割り当てられているときには、ファイルの末尾に達すればこのプログラムは停止しますよね。
キーボードからの入力の場合は、何らかの形で「ファイルの末尾」に相当する部分を作らなければなりません。
それが、「Ctrl+Z」なのです。
    • good
    • 0
この回答へのお礼

ARCさんの解説わかりやすくて、助かりました。
どうりで、何回 EXIT と打っても EXIT と返ってくるんですね。

それと、もうひとつ質問よろしいでしょうか?
MS-DOS プロンプトでスクロールバーを表示する方法ご存知でしたら教えて頂きたいのですが。
よろしくお願いします。

注1のソース間違えて書いてしまいました。すみません。
実際は、下記のソースでした・・・。

while (<>) {
print;
}

お礼日時:2001/12/11 20:03

>MS-DOS プロンプトでスクロールバーを表示する方法ご存知でしたら教えて頂きたいのですが。



えと、Win98/Meでは、コマンドプロンプトにスクロールバーは付きません。
ずらーーっと流れていくテキストを見るためには、一般的には「ページャ」を呼ばれるソフトを使います。

例えば、コマンドプロンプトで、
Dir | More
と打ち込んでみてください。dirの出力が、1画面ごとに区切られて出力されたと思います。

「|」はパイプといって、あるプログラムの出力を別のプログラムに渡す働きがあります。
「More」はページャと呼ばれるタイプのソフトで、どこかから入力を受け取って、1画面ごとに区切って画面に表示するプログラムです。

More以外にもページャはあります。「MIEL」(↓)なんか使いやすいですね。
http://www.vector.co.jp/soft/dos/util/se004783.h …


使用するコマンドによっては、1画面ごとに区切って表示するオプションが装備されているものもあります。
Dir /p
などとしても、1画面ごとの出力になりますよね。
また、Windows2000/XPでは、コマンドプロンプトにスクロールバーが付くのでそれを利用すればいいですね。
    • good
    • 0
この回答へのお礼

MIELは、カーソルが使えるんですね。後で、DL してみます。
3回もレスくださって、ありがとうございました。

お礼日時:2001/12/11 22:09

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