grepの書き方がわかりません。
Perlの初心者なんですが、以下のようなテーマをもらってプログラムを作っています。
第一引数にディレクトリのパス、第二引数に検索し たいファイル名を指定して第一引数の
パス以下にある全てのディレクトリを検索してファイルがあればそのパスを表示させなさい。
一応できたのですがプログラムの記述の一部がよくわかりません。以下のプログラムは一部です。
local ($dir, $file) = @_;
opendir(DIR,$dir) or die
@data = readdir(DIR);#ディレクトリの内容を読む
closedir(DIR);#ディレクトリを閉じる
local @fname = grep {-f "$dir/$_"} @data;
local @dname = grep {-d "$dir/$_"} @data;
$dir,$fileには第一、第二引数の文字列をいれているのですがそのディレクトリになかにファイル、ディレクトリがないか検索するためgrepを使っています。それで"$dir/$_"の部分の意味がよくわかりません。
この部分は他のサイトであったものを流用しただけなのですがよくわからないまま使ってたまたま動いたから使用しててこのままでは理解していないままなので
どうか教えてほしいです。
あともう一点ありましてgrepのところで最初自分で書いた時
local @fname = grep (-f,@data);
というように書きました。ファイルが第一引数にあるときは問題なく動作するのですがその下にあるディレクトリにあるとなぜかプログラムが終わりません。
デバッグとして@dataの中身を表示したらそのディレクトリの検索をしてはいるんですが、その中に目当てのファイルがあるはずなのに@dataの中身がからっぽで
ファイルがないことになっています。この違いがどうしてもわかりません。
以上の二点がわからないんですがどうかお手数ですがどなたか教えてください。
お礼
himeta12さん! ありがとうございました! また 宜しくお願いします!