http://www.shoeisha.com/book/pc/dic/perlcgi.asp
こちらのサンプルソース(14_bbs/bbs2.cgi)で出てきたのですが、
掲示板のプログラムでいまいち分からないところがありました。
ちなみにmsg/ディレクトリには掲示板のログファイルがあります。
ファイル名は20030421153719_1504といった年月日に
アンダースコアを挟んでプロセスIDをくっつけたものですが、
質問には関係ないかも知れません。
my $logDir = "msg/";
~
省略
~
sub getLogFiles {
my @tmpfiles = ();
while (my $tmp = <${logDir}*>) {
$tmp =~ s/^${logDir}//;
if($tmp =~ /^\d{14}_\d+$/) { push(@tmpfiles, $tmp); }
}
~
省略
~
}
とあります。
サブルーチン内にある
while (my $tmp = <${logDir}*>) {
は変数を代入すると
while (my $tmp = <msg/*>) {
でしょうがそれでも意味が分かりません。
しらべても<>はファイルハンドラ以外の用途はあまり見かけません。
*の意味も正規表現か何かかとも考えましたがよく理解出来ません。
ちょっとわかりにくい質問かも知れませんが、
どうか宜しくお願いします。
No.2ベストアンサー
- 回答日時:
ファイルグロブといって、任意のディレクトリ内のファイル名(., .. etc をのぞく)を取得するのに使います。
* はワイルドカードです。その部分は何でもいいということだと思います。
my @filenames = <${logDir}*.txt>;
とすれば txt を拡張子とするファイル名のみが @filenames に代入されます。
参考URL:http://program.station.ez-net.jp/mini/file/perl/ …
.,..をのぞくということはディレクトリオープンより手間が省けますね。リストで返すのですね。分かりやすくて大変参考になりました。
No.1
- 回答日時:
"msg/" ディレクトリ内の(ファイル|ディレクトリ)名を取り出しています。
ファイルを読むときと同じように、$tmp に(ファイル|ディレクトリ)名がループ毎に入ります。
*が付いているのは所謂ワイルドカードです。
my $dir = '/ディレクトリのパス/*';
while (my $file = <${dir}>) {
print $file, "\n";
}
とすれば、ディレクトリにある、ファイルやディレクトリが表示されます。
下のように書いても良いと思います。
while (my $file = glob $dir) {
もちろん、
print <${dir}>;
こういう書き方も出来ます。
なるほど、それは便利ですね。これまではディレクトリオープンでどうにゃらこうにゃらしてましたがこっちの方が簡単そうですね。詳しい説明をありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 11:05
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batファイルでrenameができませ...
-
dos変数の%~dp0は powershellで...
-
Perlスクリプトでフォルダを開...
-
C言語でファイル名を取得
-
下のディレクトリ(3つ)に含ま...
-
chdirがうまくできない
-
複数ファイルの読み込みについて
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
close()で例外が投げられる理由
-
エクセルVBA コードが同じでも...
-
ListBoxのデータを高速でファイ...
-
Perlで特定行から特定行までを...
-
openした後、closeしないでプロ...
-
Firefox で file:// で始まる U...
-
perlで、後ろの行を読んで、前...
-
csvファイルの横方向への改行に...
-
C言語で特定の行を抽出する方法...
-
perlで複数行のデータを自由に...
-
ifstream を利用した1行分のテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
FindFirstFileとFindNextFileで...
-
ディレクトリの判別
-
Windowsで複数のファイルを同じ...
-
vba dir の相対パス
-
パスから最後のディレクトリだ...
-
chdirがうまくできない
-
テキストファイルの結合
-
dos変数の%~dp0は powershellで...
-
Perlで フォルダ内の全て...
-
readdir()で得られるファイル・...
-
makefileでファイルをコピー(...
-
C言語でファイル名を取得
-
サーバーにある特定の拡張子フ...
-
ディレクトリツリーの表示
-
ファイル名と更新日付の取得に...
-
Director拡張子
-
LinuxのC言語で、ファイル名の...
-
複数ファイルの読み込みについて
-
ディレクトリ名を取得したい
おすすめ情報