Re: pgsql: Fix perltidy breaking perlcritic - Mailing list pgsql-hackers

From Dagfinn Ilmari Mannsåker
Subject Re: pgsql: Fix perltidy breaking perlcritic
Date
Msg-id 87edvwlm93.fsf@wibble.ilmari.org
Whole thread Raw
List pgsql-hackers
[resending to -hackers instead of -committers]

Andrew Dunstan <andrew@dunslane.net> writes:

> On Fri, Sep 9, 2022 at 10:44 PM John Naylor <john.naylor@enterprisedb.com>
> wrote:
>
>> On Fri, Sep 9, 2022 at 3:32 AM Andrew Dunstan <andrew@dunslane.net> 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.
>>
>>
> Maybe even better would be just this, which I bet perltidy would not monkey
> with, and would require no explanation:
>
> eval "\$hash_ref = $_";  ## no critic (ProhibitStringyEval)

I didn't see this until it got committed, since I'm not subscribed to
-committers, but I think it would be even better to rely on the fact
that eval returns the value of the last expression in the string, which
also gets rid of the ugly quoting and escaping, per the attached.

- ilmari

From 8ef12d134e0a21c289796207d87244ba5f5ec92c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilmari@ilmari.org>
Date: Mon, 12 Sep 2022 10:43:16 +0100
Subject: [PATCH] Use return value of eval instead of assigning inside string

---
 src/backend/catalog/Catalog.pm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm
index 919a828ca7..41bbabdfee 100644
--- a/src/backend/catalog/Catalog.pm
+++ b/src/backend/catalog/Catalog.pm
@@ -315,7 +315,7 @@ 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.
-                    eval "\$hash_ref = $_"; ## no critic (ProhibitStringyEval)
+                    $hash_ref = eval $_;    ## no critic (ProhibitStringyEval)
                     if (!ref $hash_ref)
                     {
                         die "$input_file: error parsing line $.:\n$_\n";
@@ -361,7 +361,7 @@ sub ParseData
         # the whole file at once.
         local $/;
         my $full_file = <$ifd>;
-        eval "\$data = $full_file"    ## no critic (ProhibitStringyEval)
+        $data = eval $full_file    ## no critic (ProhibitStringyEval)
           or die "error parsing $input_file\n";
         foreach my $hash_ref (@{$data})
         {
-- 
2.34.1


pgsql-hackers by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: broken table formatting in psql
Next
From: Thomas Munro
Date:
Subject: Re: Introduce wait_for_subscription_sync for TAP tests