| 1 | ------------- | 
|---|
| 2 | Version 5.000 | 
|---|
| 3 | ------------- | 
|---|
| 4 |  | 
|---|
| 5 | New things | 
|---|
| 6 | ---------- | 
|---|
| 7 | The -w switch is much more informative. | 
|---|
| 8 |  | 
|---|
| 9 | References.  See t/op/ref.t for examples.  All entities in Perl 5 are | 
|---|
| 10 | reference counted so that it knows when each item should be destroyed. | 
|---|
| 11 |  | 
|---|
| 12 | Objects.  See t/op/ref.t for examples. | 
|---|
| 13 |  | 
|---|
| 14 | => is now a synonym for comma.  This is useful as documentation for | 
|---|
| 15 | arguments that come in pairs, such as initializers for associative arrays, | 
|---|
| 16 | or named arguments to a subroutine. | 
|---|
| 17 |  | 
|---|
| 18 | All functions have been turned into list operators or unary operators, | 
|---|
| 19 | meaning the parens are optional.  Even subroutines may be called as | 
|---|
| 20 | list operators if they've already been declared. | 
|---|
| 21 |  | 
|---|
| 22 | More embeddible.  See main.c and embed_h.sh.  Multiple interpreters | 
|---|
| 23 | in the same process are supported (though not with interleaved | 
|---|
| 24 | execution yet). | 
|---|
| 25 |  | 
|---|
| 26 | The interpreter is now flattened out.  Compare Perl 4's eval.c with | 
|---|
| 27 | the perl 5's pp.c.  Compare Perl 4's 900 line interpreter loop in cmd.c | 
|---|
| 28 | with Perl 5's 1 line interpreter loop in run.c.  Eventually we'll make | 
|---|
| 29 | everything non-blocking so we can interface nicely with a scheduler. | 
|---|
| 30 |  | 
|---|
| 31 | eval is now treated more like a subroutine call.  Among other things, | 
|---|
| 32 | this means you can return from it. | 
|---|
| 33 |  | 
|---|
| 34 | Format value lists may be spread over multiple lines by enclosing in | 
|---|
| 35 | a do {} block. | 
|---|
| 36 |  | 
|---|
| 37 | You may now define BEGIN and END subroutines for each package.  The BEGIN | 
|---|
| 38 | subroutine executes the moment it's parsed.  The END subroutine executes | 
|---|
| 39 | just before exiting. | 
|---|
| 40 |  | 
|---|
| 41 | Flags on the #! line are interpreted even if the script wasn't | 
|---|
| 42 | executed directly.  (And even if the script was located by "perl -x"!) | 
|---|
| 43 |  | 
|---|
| 44 | The ?: operator is now legal as an lvalue. | 
|---|
| 45 |  | 
|---|
| 46 | List context now propagates to the right side of && and ||, as well | 
|---|
| 47 | as the 2nd and 3rd arguments to ?:. | 
|---|
| 48 |  | 
|---|
| 49 | The "defined" function can now take a general expression. | 
|---|
| 50 |  | 
|---|
| 51 | Lexical scoping available via "my".  eval can see the current lexical | 
|---|
| 52 | variables. | 
|---|
| 53 |  | 
|---|
| 54 | The preferred package delimiter is now :: rather than '. | 
|---|
| 55 |  | 
|---|
| 56 | tie/untie are now preferred to dbmopen/dbmclose.  Multiple DBM | 
|---|
| 57 | implementations are allowed in the same executable, so you can | 
|---|
| 58 | write scripts to interchange data among different formats. | 
|---|
| 59 |  | 
|---|
| 60 | New "and" and "or" operators work just like && and || but with | 
|---|
| 61 | a precedence lower than comma, so they work better with list operators. | 
|---|
| 62 |  | 
|---|
| 63 | New functions include: abs(), chr(), uc(), ucfirst(), lc(), lcfirst(), | 
|---|
| 64 | chomp(), glob() | 
|---|
| 65 |  | 
|---|
| 66 | require with a number checks to see that the version of Perl that is | 
|---|
| 67 | currently running is at least that number. | 
|---|
| 68 |  | 
|---|
| 69 | Dynamic loading of external modules is now supported. | 
|---|
| 70 |  | 
|---|
| 71 | There is a new quote form qw//, which is equivalent to split(' ', q//). | 
|---|
| 72 |  | 
|---|
| 73 | Assignment of a reference to a glob value now just replaces the | 
|---|
| 74 | single element of the glob corresponding to the reference type: | 
|---|
| 75 | *foo = \$bar, *foo = \&bletch; | 
|---|
| 76 |  | 
|---|
| 77 | Filehandle methods are now supported: | 
|---|
| 78 | output_autoflush STDOUT 1; | 
|---|
| 79 |  | 
|---|
| 80 | There is now an "English" module that provides human readable translations | 
|---|
| 81 | for cryptic variable names. | 
|---|
| 82 |  | 
|---|
| 83 | Autoload stubs can now call the replacement subroutine with goto &realsub. | 
|---|
| 84 |  | 
|---|
| 85 | Subroutines can be defined lazily in any package by declaring an AUTOLOAD | 
|---|
| 86 | routine, which will be called if a non-existent subroutine is called in | 
|---|
| 87 | that package. | 
|---|
| 88 |  | 
|---|
| 89 | Several previously added features have been subsumed under the new | 
|---|
| 90 | keywords "use" and "no".  Saying "use Module LIST" is short for | 
|---|
| 91 | BEGIN { require Module; import Module LIST; } | 
|---|
| 92 | The "no" keyword is identical except that it calls "unimport" instead. | 
|---|
| 93 | The earlier pragma mechanism now uses this mechanism, and two new | 
|---|
| 94 | modules have been added to the library to implement "use integer" | 
|---|
| 95 | and variations of "use strict vars, refs, subs". | 
|---|
| 96 |  | 
|---|
| 97 | Variables may now be interpolated literally into a pattern by prefixing | 
|---|
| 98 | them with \Q, which works just like \U, but backwhacks non-alphanumerics | 
|---|
| 99 | instead.  There is also a corresponding quotemeta function. | 
|---|
| 100 |  | 
|---|
| 101 | Any quantifier in a regular expression may now be followed by a ? to | 
|---|
| 102 | indicate that the pattern is supposed to match as little as possible. | 
|---|
| 103 |  | 
|---|
| 104 | Pattern matches may now be followed by an m or s modifier to explicitly | 
|---|
| 105 | request multiline or singleline semantics.  An s modifier makes . match | 
|---|
| 106 | newline. | 
|---|
| 107 |  | 
|---|
| 108 | Patterns may now contain \A to match only at the beginning of the string, | 
|---|
| 109 | and \Z to match only at the end.  These differ from ^ and $ in that | 
|---|
| 110 | they ignore multiline semantics.  In addition, \G matches where the | 
|---|
| 111 | last interation of m//g or s///g left off. | 
|---|
| 112 |  | 
|---|
| 113 | Non-backreference-producing parens of various sorts may now be | 
|---|
| 114 | indicated by placing a ? directly after the opening parenthesis, | 
|---|
| 115 | followed by a character that indicates the purpose of the parens. | 
|---|
| 116 | An :, for instance, indicates simple grouping.  (?:a|b|c) will | 
|---|
| 117 | match any of a, b or c without producing a backreference.  It does | 
|---|
| 118 | "eat" the input.  There are also assertions which do not eat the | 
|---|
| 119 | input but do lookahead for you.  (?=stuff) indicates that the next | 
|---|
| 120 | thing must be "stuff".  (?!nonsense) indicates that the next thing | 
|---|
| 121 | must not be "nonsense". | 
|---|
| 122 |  | 
|---|
| 123 | The negation operator now treats non-numeric strings specially. | 
|---|
| 124 | A -"text" is turned into "-text", so that -bareword is the same | 
|---|
| 125 | as "-bareword".  If the string already begins with a + or -, it | 
|---|
| 126 | is flipped to the other sign. | 
|---|
| 127 |  | 
|---|
| 128 | Incompatibilities | 
|---|
| 129 | ----------------- | 
|---|
| 130 | @ now always interpolates an array in double-quotish strings.  Some programs | 
|---|
| 131 | may now need to use backslash to protect any @ that shouldn't interpolate. | 
|---|
| 132 |  | 
|---|
| 133 | Ordinary variables starting with underscore are no longer forced into | 
|---|
| 134 | package main. | 
|---|
| 135 |  | 
|---|
| 136 | s'$lhs'$rhs' now does no interpolation on either side.  It used to | 
|---|
| 137 | interplolate $lhs but not $rhs. | 
|---|
| 138 |  | 
|---|
| 139 | The second and third arguments of splice are now evaluated in scalar | 
|---|
| 140 | context (like the book says) rather than list context. | 
|---|
| 141 |  | 
|---|
| 142 | Saying "shift @foo + 20" is now a semantic error because of precedence. | 
|---|
| 143 |  | 
|---|
| 144 | "open FOO || die" is now incorrect.  You need parens around the filehandle. | 
|---|
| 145 |  | 
|---|
| 146 | The elements of argument lists for formats are now evaluated in list | 
|---|
| 147 | context.  This means you can interpolate list values now. | 
|---|
| 148 |  | 
|---|
| 149 | You can't do a goto into a block that is optimized away.  Darn. | 
|---|
| 150 |  | 
|---|
| 151 | It is no longer syntactically legal to use whitespace as the name | 
|---|
| 152 | of a variable, or as a delimiter for any kind of quote construct. | 
|---|
| 153 |  | 
|---|
| 154 | Some error messages will be different. | 
|---|
| 155 |  | 
|---|
| 156 | The caller function now returns a false value in a scalar context if there | 
|---|
| 157 | is no caller.  This lets library files determine if they're being required. | 
|---|
| 158 |  | 
|---|
| 159 | m//g now attaches its state to the searched string rather than the | 
|---|
| 160 | regular expression. | 
|---|
| 161 |  | 
|---|
| 162 | "reverse" is no longer allowed as the name of a sort subroutine. | 
|---|
| 163 |  | 
|---|
| 164 | taintperl is no longer a separate executable.  There is now a -T | 
|---|
| 165 | switch to turn on tainting when it isn't turned on automatically. | 
|---|
| 166 |  | 
|---|
| 167 | Symbols starting with _ are no longer forced into package main, except | 
|---|
| 168 | for $_ itself (and @_, etc.). | 
|---|
| 169 |  | 
|---|
| 170 | Double-quoted strings may no longer end with an unescaped $ or @. | 
|---|
| 171 |  | 
|---|
| 172 | Negative array subscripts now count from the end of the array. | 
|---|
| 173 |  | 
|---|
| 174 | The comma operator in a scalar context is now guaranteed to give a | 
|---|
| 175 | scalar context to its arguments. | 
|---|
| 176 |  | 
|---|
| 177 | The ** operator now binds more tightly than unary minus. | 
|---|
| 178 |  | 
|---|
| 179 | Setting $#array lower now discards array elements so that destructors | 
|---|
| 180 | work reasonably. | 
|---|
| 181 |  | 
|---|
| 182 | delete is not guaranteed to return the old value for tied arrays, | 
|---|
| 183 | since this capability may be onerous for some modules to implement. | 
|---|
| 184 |  | 
|---|
| 185 | Attempts to set $1 through $9 now result in a run-time error. | 
|---|