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

[上に] [前に] [次に]