Re: cleaning perl code
Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
From: Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Noah Misch <noah@leadboat.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2020-04-11T17:01:54Z
Lists: pgsql-hackers
On 4/11/20 12:48 PM, Tom Lane wrote: > Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes: >> On 4/11/20 12:30 AM, Noah Misch wrote: >>> In summary, among those warnings, I see non-negative value in "Code before >>> warnings are enabled" only. While we're changing this, I propose removing >>> Subroutines::RequireFinalReturn. Implicit return values were not a material >>> source of PostgreSQL bugs, yet we've allowed this to litter our code: >> That doesn't mean it won't be a source of problems in future, I've >> actually been bitten by this in the past. > Yeah, as I recall, the reason for the restriction is that if you fall out > without a "return", what's returned is the side-effect value of the last > statement, which might be fairly surprising. Adding explicit "return;" > guarantees an undef result. So when this does prevent a bug it could > be a pretty hard-to-diagnose one. The problem is that it's a really > verbose/pedantic requirement for subs that no one ever examines the > result value of. > > Is there a way to modify the test so that it only complains when > the final return is missing and there are other return(s) with values? > That would seem like a more narrowly tailored check. > > Not AFAICS: <https://metacpan.org/pod/Perl::Critic::Policy::Subroutines::RequireFinalReturn> That would probably require writing a replacement module. Looking at the source if this module I think it might be possible, although I don't know much of the internals of perlcritic. cheers andrew -- Andrew Dunstan https://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Stop requiring an explicit return from perl subroutines
- 0516f94d18c5 13.0 landed
-
Use perl's $/ more idiomatically
- 8f00d84afc0d 13.0 landed
-
Use perl warnings pragma consistently
- 7be5d8df1f74 13.0 landed