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";
    }
}