OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

MS-DOSの終了

  • すぐに回答を!
  • 質問No.183187
  • 閲覧数163
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 75% (6/8)

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に関する問題」を参照してください。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.4
レベル13

ベストアンサー率 46% (643/1383)

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

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

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

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

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


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

お礼率 75% (6/8)

MIELは、カーソルが使えるんですね。後で、DL してみます。
3回もレスくださって、ありがとうございました。
投稿日時 - 2001-12-11 22:09:56
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル13

ベストアンサー率 46% (643/1383)

えーっと、これで全文ですか? これより前にファイル名を設定している部分があると思うのですが… 例えば、ファイル名が"con"などとなってませんか? 試しに、Ctrl+Zキーを入力してみてください。 これで元の画面に戻るようでしたら、「ファイルを読み込む」代わりに「ユーザからの入力」を読み取ってしまってるのが原因ですね。 きちんと存在するファイルの名前を指定してやれ ...続きを読む
えーっと、これで全文ですか?
これより前にファイル名を設定している部分があると思うのですが…

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

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

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

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

お礼率 75% (6/8)

Ctrl + Z を押したら C:\Perl に戻りました。ありがとうございます。
MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか?
昨日まで、 x(閉じるボタン) で終了していました。
投稿日時 - 2001-12-11 08:08:11
  • 回答No.2
レベル12

ベストアンサー率 39% (264/666)

>MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか? プログラムが動いている状態では、ばつで閉じようとすると警告が出ます。 コマンドコンソールと同じようにカーソルが点滅しているだけでも、この場合perlが実行状態だったので、警告が表示されたのでしょう。 今回の場合[CTL-Z]で対応できたようですが[CTL-C]も覚えておいた方が良いかも。 ...続きを読む
>MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか?

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

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

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

お礼率 75% (6/8)

Ctrl + Z を押したらタイトルバーが PERL から MS-DOS プロンプトに戻りました。
ありがとうございました。
投稿日時 - 2001-12-11 20:01:14
  • 回答No.3
レベル13

ベストアンサー率 46% (643/1383)

>MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか? C:\>などのプロンプトが表示されている状況では×でいいですが、今回の場合、まだPerlが動作中なんです。 キーボードから入力できるとありますが、これは、Perlがキーボードからの入力を受け取っているっていう状態なのです。 つまり while (<IN>) { prin ...続きを読む
>MS-DOS を終了する時って、x (閉じるボタン) で終了してはいけないのでしょうか?

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

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

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

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

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

お礼率 75% (6/8)

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

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

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

while (<>) {
print;
}
投稿日時 - 2001-12-11 20:03:02
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
あなたが体験したトラブルや解決方法を共有しませんか?
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ