---
name: "Eval::TypeTiny"
section: "3pm"
platform: "linux"
package: "perl-type-tiny"
version: "2.010001-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Eval::TypeTiny"
---

# Eval::TypeTiny(3pm)

utility to evaluate a string of Perl code in a clean environment

## NAME

Eval::TypeTiny - utility to evaluate a string of Perl code in a clean environment

## STATUS

This module is covered by the Type-Tiny stability policy.

## DESCRIPTION

This module is used by Type::Tiny to compile coderefs from strings of Perl code, and hashrefs of variables to close over.

### Functions

By default this module exports one function, which works much like the similarly named function from Eval::Closure:

- "eval\_closure(source =\> $source, environment =\> \\%env, %opt)"

  Other functions can be imported on request:

- "set\_subname( $fully\_qualified\_name, $coderef )"

  Works like the similarly named function from Sub::Util, but will fallback to doing nothing if neither Sub::Util nor Sub::Name are available. Also will cowardly refuse the set the name of a coderef a second time if it's already named it.

- "type\_to\_coderef( $type, %options )"

  Turns a Type::Tiny object into a coderef, suitable for installing into a symbol table to create a function like `"ArrayRef"` or `"Int"`. (Actually should work for any object which provides `"is_parameterizable"`, `"parameterize"`, and `"qualified_name"` methods, such as Type::Coercion.)

  `$options{post_method}` can be a string of Perl indicating a method to call on the type constraint before returning it. For example `'->moose_type'`.

  `$options{description}` can be a description of the coderef which may be shown in stack traces, etc.

  The coderef will be named using `"set_subname"` unless `$options{anonymous}` is true.

  If `$type` is undef, then it is assumed that the type constraint hasn't been defined yet but will later, yet you still want a function now. `$options{type_library}` and `$options{type_name}` will be used to find the type constraint when the function gets called.

### Constants

The following constants may be exported, but are not by default.

- "HAS\_LEXICAL\_SUBS"

  Boolean indicating whether Eval::TypeTiny has support for lexical subs. (This feature requires Perl 5.18.)

- "ALIAS\_IMPLEMENTATION"

  Returns a string indicating what implementation of `"alias => 1"` is being used. Eval::TypeTiny will automatically choose the best implementation. This constant can be matched against the `"IMPLEMENTATION_*"` constants.

- "IMPLEMENTATION\_NATIVE"

  If `"ALIAS_IMPLEMENTATION eq IMPLEMENTATION_NATIVE"` then Eval::TypeTiny is currently using Perl 5.22's native alias feature. This requires Perl 5.22.

- "IMPLEMENTATION\_DEVEL\_LEXALIAS"

  If `"ALIAS_IMPLEMENTATION eq IMPLEMENTATION_DEVEL_LEXALIAS"` then Eval::TypeTiny is currently using Devel::LexAlias to provide aliases.

- "IMPLEMENTATION\_PADWALKER"

  If `"ALIAS_IMPLEMENTATION eq IMPLEMENTATION_PADWALKER"` then Eval::TypeTiny is currently using PadWalker to provide aliases.

- "IMPLEMENTATION\_TIE"

  If `"ALIAS_IMPLEMENTATION eq IMPLEMENTATION_TIE"` then Eval::TypeTiny is using the fallback implementation of aliases using `"tie"`. This is the slowest implementation, and may cause problems in certain edge cases, like trying to alias already-tied variables, but it's the only way to implement `"alias => 1"` without a recent version of Perl or one of the two optional modules mentioned above.

- "NICE\_PROTOTYPES"

  If this is true, then type\_to\_coderef will give parameterizable type constraints the slightly nicer prototype of `"(;$)"` instead of the default `"(;@)"`. This allows constructs like:

  ```
     ArrayRef[Int] | HashRef[Int]
  ```

  ... to "just work".

## EVALUATION ENVIRONMENT

The evaluation is performed in the presence of strict, but the absence of warnings. (This is different to Eval::Closure which enables warnings for compiled closures.)

The feature pragma is not active in the evaluation environment, so the following will not work:

```
   use feature qw(say);
   use Eval::TypeTiny qw(eval_closure);

   my $say_all = eval_closure(
      source => 'sub { say for @_ }',
   );
   $say_all->("Hello", "World");
```

The feature pragma does not "carry over" into the stringy eval. It is of course possible to import pragmas into the evaluated string as part of the string itself:

```
   use Eval::TypeTiny qw(eval_closure);

   my $say_all = eval_closure(
      source => 'sub { use feature qw(say); say for @_ }',
   );
   $say_all->("Hello", "World");
```

## BUGS

Please report any bugs to \<https://github.com/tobyink/p5-type-tiny/issues\>.

## SEE ALSO

Eval::Closure, Error::TypeTiny::Compilation.

## AUTHOR

Toby Inkster \<tobyink@cpan.org\>.

## COPYRIGHT AND LICENCE

This software is copyright (c) 2013-2014, 2017-2025 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

## DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
