#!/usr/bin/ruby

#
## http://rosettacode.org/wiki/Walk_a_directory/Recursively
#

func traverse(Block callback, Dir dir) {
    dir.open(\var dir_h) || return nil;

    dir_h.entries.each { |entry|
        if (entry.is_a(Dir)) {
            traverse(callback, entry);
        } else {
            callback(entry);
        }
    }
}

var dir = Dir.cwd;
var pattern = /sierpinski/;   # display files that contain 'sierpinski'

traverse(
    { |file|
        if (file.basename ~~ pattern) {
            say file;
        }
    } => dir
);