class matcher { var str; public proc create(s) { str = s; } operator ~= (rhs) { match (str) { case rhs : return oadl::matchvec(); default : return nil; } } operator \~= (lhs) { return (lhs ~= str) ? {lhs} : nil; } } proc main() { var m = new matcher("123 foo"); match (m) { case "([0-9]*)" : "PASS! - ?0 = ", ?0, '\n'; default : "FAIL!\n"; } }