# phpman > man > autodie::Scope::GuardStack

## NAME
    [autodie::Scope::GuardStack](https://www.chedong.com/phpMan.php/perldoc/autodie%3A%3AScope%3A%3AGuardStack/markdown) - Hook stack for managing scopes via %^H

## SYNOPSIS
        use [autodie::Scope::GuardStack](https://www.chedong.com/phpMan.php/perldoc/autodie%3A%3AScope%3A%3AGuardStack/markdown);
        my $stack = [autodie::Scope::GuardStack](https://www.chedong.com/phpMan.php/perldoc/autodie%3A%3AScope%3A%3AGuardStack/markdown)->new
        $^H{'my-key'} = $stack;

        $stack->push_hook(sub {});

## DESCRIPTION
    This class is a stack of hooks to be called in the right order as scopes go away. The stack is
    only useful when inserted into "%^H" and will pop hooks as their "scope" is popped. This is
    useful for uninstalling or reinstalling subs in a namespace as a pragma goes out of scope.

    Due to how "%^H" works, this class is only useful during the compilation phase of a perl module
    and relies on the internals of how perl handles references in "%^H". This module is not a part
    of autodie's public API.

### Methods
   new
      my $stack = [autodie::Scope::GuardStack](https://www.chedong.com/phpMan.php/perldoc/autodie%3A%3AScope%3A%3AGuardStack/markdown)->new;

    Creates a new "[autodie::Scope::GuardStack](https://www.chedong.com/phpMan.php/perldoc/autodie%3A%3AScope%3A%3AGuardStack/markdown)". The stack is initially empty and must be inserted
    into "%^H" by the creator.

   push_hook
      $stack->push_hook(sub {});

    Add a sub to the stack. The sub will be called once the current compile-time "scope" is left.
    Multiple hooks can be added per scope

## AUTHOR
    Copyright 2013, Niels Thykier <<niels@thykier.net>>

## LICENSE
    This module is free software. You may distribute it under the same terms as Perl itself.

