Author: lwall Date: 2009-11-12 19:35:33 +0100 (Thu, 12 Nov 2009) New Revision: 29060
Modified: docs/Perl6/Spec/S04-control.pod Log: [S04] liberalize phaser blorsts somewhat for more consistency, PerlJam++ Modified: docs/Perl6/Spec/S04-control.pod =================================================================== --- docs/Perl6/Spec/S04-control.pod 2009-11-11 18:20:41 UTC (rev 29059) +++ docs/Perl6/Spec/S04-control.pod 2009-11-12 18:35:33 UTC (rev 29060) @@ -13,8 +13,8 @@ Created: 19 Aug 2004 - Last Modified: 10 Nov 2009 - Version: 86 + Last Modified: 12 Nov 2009 + Version: 87 This document summarizes Apocalypse 4, which covers the block and statement syntax of Perl. @@ -1225,6 +1225,8 @@ my $compiletime = BEGIN localtime; our $temphandle = START maketemp(); +In fact, most of these phasers will take either a block or a statement +(known as a I<blorst> in the vernacular). This can be particularly useful to expose a lexically scoped declaration to the surrounding context. Hence these declare the same variables with the same scope as the preceding example, but run the @@ -1236,6 +1238,20 @@ (Note, however, that the value of a variable calculated at compile time may not persist under run-time cloning of any surrounding closure.) +Most of the non-value-producing phasers may also be so used: + + END say my $accumulator; + +Note, however, that + + END say my $accumulator = 0; + +sets the variable to 0 at C<END> time, since that is when the "my" +declaration is actually executed. Only argumentless phasers may +use the statement form. This means that C<CHECK> and C<CONTROL> +always require a block, since they take an argument that sets C<$_> +to the current topic. + Code that is generated at run time can still fire off C<CHECK> and C<INIT> phasers, though of course those phasers can't do things that would require travel back in time. You need a wormhole for that.