On Fri, Sep 9, 2022 at 3:32 AM Andrew Dunstan <[email protected]> wrote:
> A better way do do this IMNSHO is to put the eval in a block on its own along
> with the no critic marker on its own line, like this:
>
> {
> ## no critic (ProhibitStringyEval)
> eval ...
> }
>
> perlcritic respects block boundaries for its directives.
I tried that in the attached -- it looks a bit nicer but requires more
explanation. I don't have strong feelings either way.
--
John Naylor
EDB: http://www.enterprisedb.com
diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm
index 1546e1b335..052abe322f 100644
--- a/src/backend/catalog/Catalog.pm
+++ b/src/backend/catalog/Catalog.pm
@@ -314,11 +314,14 @@ sub ParseData
{
# We're treating the input line as a piece of Perl, so we
# need to use string eval here. Tell perlcritic we know what
- # we're doing.
- #<<< protect next line from perltidy
- # so perlcritic annotation works
- eval '$hash_ref = ' . $_; ## no critic (ProhibitStringyEval)
- #>>>
+ # we're doing. The separate block for this statement is to
+ # limit the scope of the perlcritic exception, which is on
+ # its own line to keep perltidy from reindenting it.
+ {
+ ## no critic (ProhibitStringyEval)
+ eval '$hash_ref = ' . $_;
+ }
+
if (!ref $hash_ref)
{
die "$input_file: error parsing line $.:\n$_\n";