---
name: "autodie::Scope::GuardStack"
section: "3p"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["openbsd"]
url: "https://new.carta.tech/autodie::Scope::GuardStack"
---

# autodie::Scope::GuardStack(3p)

Hook stack for managing scopes via %^H

## NAME

autodie::Scope::GuardStack -  Hook stack for managing scopes via %^H

## SYNOPSIS

```
    use autodie::Scope::GuardStack;
    my $stack = autodie::Scope::GuardStack->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->new;
```

Creates a new `"autodie::Scope::GuardStack"`.  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.
