String eval is often used for dynamic code generation. For instance, Moose uses it heavily, to generate inlined versions of accessors and constructors, which speeds code up at runtime by a significant amount. String eval is not without its issues however - it's difficult to control the scope it's used in (which determines which variables are in scope inside the eval), and it can be quite slow, especially if doing a large number of evals. This module attempts to solve both of those problems. It provides an eval_closure function, which evals a string in a clean environment, other than a fixed list of specified variables. It also caches the result of the eval, so that doing repeated evals of the same source, even with a different environment, will be much faster (but note that the description is part of the string to be evaled, so it must also be the same (or non-existent) if caching is to work properly).
15 lines
917 B
Text
15 lines
917 B
Text
String eval is often used for dynamic code generation. For instance,
|
|
Moose uses it heavily, to generate inlined versions of accessors
|
|
and constructors, which speeds code up at runtime by a significant
|
|
amount. String eval is not without its issues however - it's
|
|
difficult to control the scope it's used in (which determines which
|
|
variables are in scope inside the eval), and it can be quite slow,
|
|
especially if doing a large number of evals.
|
|
|
|
This module attempts to solve both of those problems. It provides
|
|
an eval_closure function, which evals a string in a clean environment,
|
|
other than a fixed list of specified variables. It also caches the
|
|
result of the eval, so that doing repeated evals of the same source,
|
|
even with a different environment, will be much faster (but note
|
|
that the description is part of the string to be evaled, so it must
|
|
also be the same (or non-existent) if caching is to work properly).
|