Perl::...ngyEval(3pm)

🌸 NAME 🌸

okay bestie, welcome to the Perl::...ngyEval(3pm) page πŸ’– the policy here is Perl::Critic::Policy::BuiltinFunctions::ProhibitStringyEval, and its whole thing is: write eval { my $foo; bar($foo) } instead of eval "my $foo; bar($foo);". periodt πŸ’…


πŸ’… AFFILIATION πŸ’…

This Policy is part of the core Perl::Critic distribution. cute, iconic, built-in behavior ✨

✨ DESCRIPTION ✨

The string form of eval gets recompiled every single time it is executed 😭 whereas the block form is only compiled once. also, the string form doesn’t give compile-time warnings. ngl that’s the whole vibe check:

eval "print $foo";        # not ok
eval {print $foo};        # ok

πŸŽ€ CONFIGURATION πŸŽ€

There is an allow_includes boolean option for this Policy. If it’s set, then strings that look like they only include an optional package statement followed by a single use or require statement (with the possible following statement that consists of a single number) are allowed. with this option set, the following are flagged as indicated πŸ‘‡

eval 'use Foo';                           # ok
eval 'require Foo';                       # ok
eval "use $thingy;";                      # ok
eval "require $thingy;";                  # ok
eval 'package Pkg; use Foo';              # ok
eval 'package Pkg; require Foo';          # ok
eval "package $pkg; use $thingy;";        # ok
eval "package $pkg; require $thingy;";    # ok
eval "use $thingy; 1;";                   # ok
eval "require $thingy; 1;";               # ok
eval "package $pkg; use $thingy; 1;";     # ok
eval "package $pkg; require $thingy; 1;"; # ok

eval 'use Foo; blah;';                    # still not ok
eval 'require Foo; 2; 1;';                # still not ok
eval 'use $thingy;';                      # still not ok
eval 'no Foo';                            # still not ok

If you don’t understand why the number is allowed, see Perl::Critic::Policy::ErrorHandling::RequireCheckingReturnValueOfEval 🫢

This option inspired by Ricardo SIGNES' Perl::Critic::Policy::Lax::ProhibitStringyEval::ExceptForRequire. slay for the credit πŸ’–

πŸ¦‹ SEE ALSO πŸ¦‹

  • Perl::Critic::Policy::BuiltinFunctions::RequireBlockGrep
  • Perl::Critic::Policy::BuiltinFunctions::RequireBlockMap

πŸ‘‘ AUTHOR πŸ‘‘

Jeffrey Ryan Thalhammer <jeff@imaginative-software.com> ✨

Copyright (c) 2005-2011 Imaginative Software Systems. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of this license can be found in the LICENSE file included with this module.

mwah πŸ’‹ β€” this page came from perl v5.42.0, dated 2024-10-23, and it’s the Perl::...ngyEval(3pm) manual. byeee bestie 🫢

πŸ“¦ where this page comes from