version 1.1 o Works with Java 1.2 version 1.1b3 o Added Substitution interface as well as StringSubstitution and Perl5Substitution classes implementing the interface. The string only substitute methods in Util are now deprecated. You should use use the new substitute methods taking a Substitution as an argument. Use StringSubstitution when you don't need to perform match interpolation and use Perl5Substitution when you want to perform interpolation. You can create your own Substitution implementations to make substitutions a function of a match. o Added READ_ONLY_MASK compilation option to Perl5Compiler to better support multi-threaded applications. If you use the READ_ONLY_MASK option, the resulting Perl5Pattern can be safely shared among multiple Perl5Matcher instances in separate threads. o Made some miscellaneous performance improvements. o Perl5Pattern now implements the Cloneable interface so that you may clone pattern instead of compiling a new one if you desire a duplicate copy. version 1.1b2 o Removed Perl5ReaderInput and deprecation of Perl5StreamInput. Instead added two constructors to Perl5ReaderInput which would accept an InputStream and renamed the class Perl5StreamInput. This maintains compatibility with old code while at the same time adding the benefits of searching Reader instances. o Changed streamInputExample.java back to use Perl5StreamInput version 1.1b1 o Added Perl5ReaderInput which supplants Perl5StreamInput. o Deprecated Perl5StreamInput. o Made Perl5Pattern implement the serializable interface. Serialized Perl5Patterns from the 1.1 beta releases will NOT be compatible with the final 1.1 release because we are changing some of the fields in Perl5Pattern during the beta-test process. o \s now corresponds to Character.isWhitespace() rather than Character.isSpace(), which makes it fully Unicode friendly. o Changed the example streamInputExample.java to use Perl5ReaderInput. version 1.0.7 o Added a quotemeta(String pattern) to Perl5Compiler which is analogous to the Perl quotmeta builtin function. It became clear developers wanted this to make it easier to take user input from a GUI and interpret it literally rather than as a regular expression. o Fixed a bug where \00 and \000 occuring in a pattern would make Perl5Compiler.compile() enter an infinite loop. Few people (including ourselves) use \00 and \000 or we would have caught this sooner. Thanks to Jeffrey Friedl (author of Mastering Regular Expressions) for catching this one. o Made a change to Perl5Compiler.compile()'s handling of backreferences. Previously, Perl5Compiler would allow an expression such as a(abc)\2defg because Perl would allow it. However, this expression will cause a runtime failure during matching. In Perl, the expression will actually NEVER match anything even though it is accepted. Rather than accept the expression, Perl5Compiler now rejects the expression by throwing a MalformedPatternException. The problem with the expression is that there is a backreference to a set of parentheses BEFORE those parentheses occur in the expression. For backreferences greater than \9 in these situations, the backreference is treated as an octal character. But those less than or equal to 9 are always supposed to be interpreted as backreferences (except for \0 which is always the null character). o The streamInputExample.txt file for the streamInputExample.java example program had been inadvertently left out of some earlier distributions. It's back in now. version 1.0.6 o Made some performance optimizations to the Perl5Matcher matches() methods to make them faster. o Added a set of matchesPrefix() methods to facilitate certain tokenizing applications. Because any regular expression matching engine that is capable of determining an exact match must also be capable of determining a prefix match, these methods were added to the PatternMatcher interface, rather than making them unique to Perl5Matcher. This feature first appeared in the AwkMatcher class from AwkTools 1.0b2, and we decided to move it into OROMatcher based on your suggestions. o Added a new example, prefixExample, to illustrate a use of the matchesPrefix() method. o Moved examples/ directory into the main distribution directory. o Added charAt() and substring() convenience methods to PatternMatcherInput. These are more efficient than calling toString() first and then performing the operation. version 1.0.5 o Added preMatch(), postMatch(), match(), getMatchBeginOffset(), getMatchEndOffset() and setMatchOffsets() methods to PatternMatcherInput. The preMatch(), postMatch(), and match() methods are convenience methods provided as a result of the addition of the match offset methods which were a necessary addition so PatternMatcherInput could properly preserve state across consecutive matches with the PatternMatcher contains() method. Previous to this change, certain null string matches could result in unexpected behavior across consecutive matches. For example, given the expression (.*?)(?=<<) and the input mm<