PPI::Statement::Scheduled - A scheduled code block


PPI documentation Contained in the PPI distribution.

Index


Code Index:

NAME

Top

PPI::Statement::Scheduled - A scheduled code block

INHERITANCE

Top

  PPI::Statement::Scheduled
  isa PPI::Statement::Sub
      isa PPI::Statement
          isa PPI::Node
              isa PPI::Element

DESCRIPTION

Top

A scheduled code block is one that is intended to be run at a specific time during the loading process.

There are five types of scheduled block:

  BEGIN {
  	# Executes as soon as this block is fully defined
  	...
  }

  CHECK {
  	# Executes after overall compile-phase in reverse order
  	...
  }

  UNITCHECK {
  	# Executes after compile-phase of individual module in reverse order
  	...
  }

  INIT {
  	# Executes just before run-time
  	...
  }

  END {
  	# Executes as late as possible in reverse order
  	...
  }

Technically these scheduled blocks are actually subroutines, and in fact may have 'sub' in front of them.

METHODS

Top

type

The type method returns the type of scheduled block, which should always be one of 'BEGIN', 'CHECK', 'UNITCHECK', 'INIT' or 'END'.

TO DO

Top

- Write unit tests for this package

SUPPORT

Top

See the support section in the main module.

AUTHOR

Top

Adam Kennedy <adamk@cpan.org>

COPYRIGHT

Top


PPI documentation Contained in the PPI distribution.
package PPI::Statement::Scheduled;

use strict;
use PPI::Statement::Sub ();

use vars qw{$VERSION @ISA};
BEGIN {
	$VERSION = '1.215';
	@ISA     = 'PPI::Statement::Sub';
}

sub __LEXER__normal { '' }

sub _complete {
	my $child = $_[0]->schild(-1);
	return !! (
		defined $child
		and
		$child->isa('PPI::Structure::Block')
		and
		$child->complete
	);
}

sub type {
	my $self     = shift;
	my @children = $self->schildren or return undef;
	$children[0]->content eq 'sub'
		? $children[1]->content
		: $children[0]->content;
}

# This is actually the same as Sub->name
sub name {
	shift->type(@_);
}

1;