---
name: "Scope::Guard"
section: "3pm"
platform: "linux"
package: "perl-scope-guard"
version: "0.21-10"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Scope::Guard"
---

# Scope::Guard(3pm)

lexically-scoped resource management

## NAME

Scope::Guard - lexically-scoped resource management

## SYNOPSIS

```
    my $guard = guard { ... };
      # or
    my $guard = scope_guard \&handler;
      # or
    my $guard = Scope::Guard->new(sub { ... });
    $guard->dismiss(); # disable the handler
```

## DESCRIPTION

This module provides a convenient way to perform cleanup or other forms of resource management at the end of a scope. It is particularly useful when dealing with exceptions: the `"Scope::Guard"` constructor takes a reference to a subroutine that is guaranteed to be called even if the thread of execution is aborted prematurely. This effectively allows lexically-scoped "promises" to be made that are automatically honoured by perl's garbage collector.

For more information, see: \<http://www.drdobbs.com/cpp/184403758\>

## METHODS

### new

```
    my $guard = Scope::Guard->new(sub { ... });
      # or
    my $guard = Scope::Guard->new(\&handler);
```

The `"new"` method creates a new `"Scope::Guard"` object which calls the supplied handler when its `"DESTROY"` method is called, typically at the end of the scope.

### dismiss

```
    $guard->dismiss();
      # or
    $guard->dismiss(1);
```

`"dismiss"` detaches the handler from the `"Scope::Guard"` object. This revokes the "promise" to call the handler when the object is destroyed.

The handler can be re-enabled by calling:

```
    $guard->dismiss(0);
```

## EXPORTS

### guard

`"guard"` takes a block and returns a new `"Scope::Guard"` object. It can be used as a shorthand for:

```
    Scope::Guard->new(...)
```

e.g.

```
    my $guard = guard { ... };
```

Note: calling `"guard"` anonymously, i.e. in void context, will raise an exception. This is because anonymous guards are destroyed **immediately** (rather than at the end of the scope), which is unlikely to be the desired behaviour.

### scope\_guard

`"scope_guard"` is the same as `"guard"`, but it takes a code ref rather than a block. e.g.

```
    my $guard = scope_guard \&handler;
```

or:

```
    my $guard = scope_guard sub { ... };
```

or:

```
    my $guard = scope_guard $handler;
```

As with `"guard"`, calling `"scope_guard"` in void context will raise an exception.

## VERSION

0\.21

## SEE ALSO

- •

  B::Hooks::EndOfScope

- •

  End

- •

  Guard

- •

  Hook::Scope

- •

  Object::Destroyer

- •

  Perl::AtEndOfScope

- •

  ReleaseAction

- •

  Scope::local\_OnExit

- •

  Scope::OnExit

- •

  Sub::ScopeFinalizer

- •

  Value::Canary

## AUTHOR

chocolateboy \<chocolate@cpan.org\>

## COPYRIGHT

Copyright (c) 2005-2015, chocolateboy.

This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.
