Dirコマンドを実現するには?
[上に]
[前に]
[次に]
おかゆきお
[E-Mail]
[HomePage]
2000/03/15(水) 04:33:09
Win98でperlを使いたいのですが、シェルコマンドとPerlコマンドの関係がよく分かりません。
opendir(DIR, "$from_dir"); <このコマンドを参考に使って
@filelist = readdir(DIR);
closedir(DIR);
@filelist = sort(@filelist);
foreach $file (@filelist) {
print $file ;
}
print $#file;
としたところ、 −1 とだけ表示されました。
Dirコマンドが無視されてしまっているようなのですが……。
Ichi
2000/03/15(水) 06:12:19
どこにもdirなんてない様に見えますが。
$from_dirの中に入っているのですか?
Ichi
2000/03/15(水) 06:15:40
おっと、すみません。おおはずしですね。上のは無視してください。
opendir(DIR, "$from_dir");の戻り値が真であることを確認してみてください。
フシギダネ
2000/03/15(水) 08:28:55
stat($from_dir);
opendir(DIR, $from_dir);
local(@filelist) = readdir(DIR);
closedir(DIR);
@filelist = sort(@filelist);
foreach $file (@filelist) {
print $file ;
}
Fuji.♪
[E-Mail]
[HomePage]
2000/03/15(水) 15:13:47
タイトルに書かれている内容と処理の内容を見ると、
$from_dirが存在するという前提で、
@filelist = sort(`dir /b \"$from_dir\"`);
print @filelist;
だけで済むのですが・・・。違う?そうじゃない? (^^;
Ni
2000/03/15(水) 15:24:41
>opendir(DIR, "$from_dir");の戻り値が真であることを確認してみてください。
opendir(DIR, "$from_dir") or die "Can\'t Open\n"; とかね。
おかゆきお
[E-Mail]
[HomePage]
2000/03/16(木) 01:44:18
みなさん。ホローありがとうございます。
opendir(DIR, "$from_dir") or die "Can\'t Open\n"; <の
実行結果は、Can't オープンでした。
わたしの、質問の意味(実行したいの)は、Win98のdir,copy
などです。
Perlのコマンド(関数)とWin98のコマンドの関係がわからないのです。
ts.bat の内容、 Dir のとき、Windows>プロンプトで、ts と、入力すると、そのホルダの内容が表示されます。
tss.plの内容、同じくDirのとき、同じくプロンプトから、
perl -e tss.pl と入力しても、Perlから、Dirコマンドが実行されません。
こう言った基本的なコマンドをPerl(Win98)で使いたいのです。
うまく質問できなくてすみません。
Ichi
2000/03/16(木) 06:29:41
なら、
system('dir');
がぴったりでしょう。
Ni (Ichiさんゴメンm(__)m)
2000/03/16(木) 09:56:06
外部コマンド実行
http://www.tohoho-web.com/wwwperl1.htm#ExecCommand
を読むと良く分かります、
dirならOPEN copyならSYSTEM が適当では?
Fuji.♪
[E-Mail]
[HomePage]
2000/03/16(木) 17:08:04
Perlの各コマンドはPerlのプログラムが実行するものです。
Win98などの各コマンドはc:\command.comなどにあるプログラムが実行するものです。
このc:\command.comなどといったファイルは、「シェル」と呼んだりするプログラムです。
こいつの機能を利用して処理するには、system()や``などといったものを利用します。
system()と``はまったく違うものですから、正しく使い分けてください。 (^_^;
詳しくは perlfunc を読む、なのでしょうけど・・・。
デフォルトのままインストールしているなら、 c:\Perl\html\pod\perlfunc.html で見られます。
でも、
$a = system(dir);
print "-----\n";
print $a;
と
$a = `dir`;
print "-----\n";
print $a;
だけでもなんとなくの違いはわかると思います。 (^^;
なお、当然のことですがsystem()や``は、その環境ごとに入力するコマンドは変わっていくことになります。
Windowsではdirですが、UNIXベースならlsとか。
おかゆきお
[E-Mail]
[HomePage]
2000/03/17(金) 04:55:42
ホローありがとうございます。なんとなく分かってきました。
スクリプトファイルに system "dir" ; と書いて、
perl tss.pl としたら見事、ホルダの内容が表示されました。
いま、インストールしたままの状態で、
opendir(DIR,"$from_dir") というコマンドが働かないのは、?
どこかで、DIR を定義しているのでしょうか?(ペールのコマンド)
それとも、シェルを呼び出して $formDir の内容を読み出しているのでしょうか?
わたしもこれから、func を読んでみます。
おかげさまで、だいぶ勉強する方向が見えてきました。
みなさんありがとうございます。
コウノトリ
2000/03/17(金) 10:18:20
Active Perl for Win32 5.2.2(今現在の最新版)はopendirにバグがあります。これが関係あるのかな?
でも、perl.exeではうまくいってるんですよね。perlis.dllは完全にバグってますが。
Fuji.♪
[E-Mail]
[HomePage]
2000/03/17(金) 13:25:04
DIRってのは、自分でつけるわかりやすい名前です。別にDIRというのが定義されているわけではありません。 (^_^;
opendir()は別にシェルを呼び出したりするわけではありません。
あと、参考までに。$from_dirには正しく存在するディレクトリ名をセットしていますか? (^^;
サンプルで一番最初に挙げられているコードでも、ディレクトリ名が正しければ表示されるかと思いますが。とりあえず opendir(DIR, '/') などで試してみてください。
コウノトリさん:
ActivePerlの最新リリース版のバージョンはPerl 5.005_03のbuild 522じゃないでしょうか・・・。 (^^;
コウノトリ
2000/03/18(土) 00:12:35
>ActivePerlの最新リリース版のバージョンはPerl 5.005_03のbuild 522じゃないでしょうか・・・。 (^^;
そう、そうです。(^^;
perlis.dllでopendirが常に失敗するのです。
本件とは関係ないと思いますが・・・
おかゆきお
[E-Mail]
[HomePage]
2000/03/18(土) 01:08:44
ホローありがとうございました。おかげさまで、Win98でperlを
使える気がしてきました。
CigWinなど、Win 以外のシェルをインスト無しでOKと、分かりましたので、具体的なアプリをインストにとりかかれます。
みなさんありがとうございました。ずうずうしいお願いですが、
見出しを変えて動かないアプリの質問を又させていただきたく。
どうぞよろしくお願いいたします。 m(__)m
みなさんのホローうれしかったです。 ありがとうございました。
おかゆきお
[E-Mail]
[HomePage]
2000/03/18(土) 01:12:34
[[解決]]
先ほど解決のチェックいれるのわすれてしまいましたので、
もう一度お礼とチェックを送信します。
ありがとうございました。 m(__)m
[上に]
[前に]
[次に]