新井です。

必要に迫られて、シェルのようなwildcardマッチを行う
クラスGlobを作りました。(incomingに置きました。
偽英語のドキュメントもついてます:-)

通常、正規表現があれば十分ですが、アプリのユーザに
公開するインタフェースとして正規表現よりも好まれる
ことがあるのではないかと思います。

今さらながら、まともに拡張モジュールを作ったのは初
めてです。おかしなところがあればぜひ教えてください。

# ほとんどの関数をruby/dir.c から拝借させて頂きま
# した _o_

使い方は、以下のような感じです。


#!/usr/local/bin/ruby require "glob.so" p Glob.new("*.txt") =~ "a.txt" # => true p %w(a.txt a/b.txt c.txt).grep(Glob.new("*.txt")) # => ["a.txt" "c.txt"] p %w(a.txt a/b.txt c.txt).grep(Glob.new("a*.txt", 0)) # => ["a.txt" "a/b.txt"] もっと実用的な例としては以下とか
require "ftplib" require "glob" class FTP def mgettextfile(pattern, callback = nil) glob = Glob.new(pattern) self.nlst.grep(glob).each {|file| puts "get : #{file}" begin gettextfile(file, file, callback) rescue FTPPermError STDERR.puts $! end } end end ftp = FTP.new("localhost") ftp.login("anonymous", ENV["USER"] + "@localhost") ftp.chdir("/pub") puts ftp.nlst puts "-" * 10 ftp.mgettextfile("*.txt") ftp.close