Hatena::Diary

サンプルコードによるPerl入門

  サンプルコード中心のPerlの入門サイトです。現代的なPerl(v5.8.1以降)の書き方に準拠しています。(English) 社内での勉強会や講習のテキストとしてもお使いください。またPerlの初学者の方にもぜひ教えてあげてください。Perlは実用的、高速で、業務を大幅に効率化できる、とても優れたプログラミング言語です。ぜひお役立てください。

2008-05-29

カレントディレクトリのファイル一覧を取得する - glob関数

use strict;
use warnings;

### カレントディレクトリのファイル一覧を取得する。
#    glob

print "1: カレントディレクトリのファイル一覧を取得する。\n";
my @all_files = glob "*"; # * は、. で始まらないすべてのファイルを表現
print join( "\n", @all_files ), "\n\n";


print "2: .txt で終わるファイル一覧を取得する。\n" ;
my @text_files = glob "*.txt";
print join( "\n", @text_files ), "\n\n";


print "3: .txt と .pl で終わるファイル一覧を取得する。\n";
my @text_and_pl_files = glob "*.txt *.pl"; # 複数パターンある場合は空白で区切る
print join( "\n", @text_and_pl_files ), "\n\n";


print "4: 通常ファイルの一覧を取得する。\n";
my @normal_files = glob "*";
@normal_files = grep{ -f $_ } @normal_files; # 複雑なことをしたいときは,"*" で
                                             # すべてのファイルを取得してから、
                                             # grep で選別する。
print join( "\n", @normal_files ), "\n\n";

__END__

ファイル一覧を取得する。

my @all_files = glob "*"; 
  • ファイル一覧を取得するには、glob 演算子を使います。
  • 対象は、カレントディレクトリのファイル(ディレクトリを含む)になります。
  • 別のディレクトリのファイル一覧を取得したときは、 chdir で、カレントディレクトリを移動するか、相対パスあるいは、絶対パスで、表現します。( 下の例で説明 )

glob の引数の表現例

"*".で始まらない、すべてのファイル
"*.txt".txt で終わるファイル
"*.txt *.pl.txt あるいは、 .pl で終わるファイル( .txt と .pl の間に空白があります )
"* .*"すべてのファイル( * と .* の間に空白があります )
"lib/*libディレクトリ以下のファイル
c:/dir/*絶対パスで指定
  • 空白で、区切ると複数のパターンを指定できます。
  • 相対パス以外にも、絶対パスも使うことができます。
  • * は、Unixのシェルで用いられるワイルドカードのひとつです。glob関数は、シェルのワイルドカード展開の規則にしたがって、*を含むファイル名を展開します。

glob ドキュメント

 

perlcodesampleperlcodesample 2008/06/01 20:35
弾さんに、glob関数は、「シェルのグロブどおりにファイル名を展開する」と説明すべきと指摘されました。

http://blog.livedoor.jp/dankogai/archives/51058540.html

ここでは、シェルのワイルドカード展開の話題は、避けましたが、補則で追加しておきます。

あと、glob関数で取得するファイル一覧というのは、ディレクトリも含みますので、誤解を生まないよう、修正しました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証