| 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 |
|
|---|
|
|---|