Re: [PATCH] Clear up perlcritic 'missing return' warning - Mailing list pgsql-hackers

From Mike Blackwell
Subject Re: [PATCH] Clear up perlcritic 'missing return' warning
Date
Msg-id CAESHdJoFenPdc=XfrzM5m9wCGqfHEbum0eQ4UwYRDGw+8vxOyA@mail.gmail.com
Whole thread Raw
In response to Re: [PATCH] Clear up perlcritic 'missing return' warning  (Michael Paquier <michael@paquier.xyz>)
Responses Re: [PATCH] Clear up perlcritic 'missing return' warning  (Andrew Dunstan <andrew.dunstan@2ndquadrant.com>)
List pgsql-hackers
On Tue, May 22, 2018 at 3:32 AM, Michael Paquier <michael@paquier.xyz> wrote:

<snip> And this
maps with any C code.

The important differences here are:
  *) Declaring a C function as void prevents returning a value.  The intent not to return a value is clear to any caller and is enforced by the compiler.  There is no equivalent protection in Perl.
  *) Falling off the end of a C function that returns a type other than void has undefined results.  Perl will always return the value of the last statement executed.

Because Perl does allow returning a value without explicitly using return, it's easy to write code that breaks if an unwary person adds a line to the end of the subroutine.  There's a common constructor incantation that has this problem.  It's a real gotcha for C programmers just starting to poke around in Perl code.  

This difference also allows users of .pm modules to abuse the API of a method intended to be "void", if the value returned falling off the end happens to seem useful, leading to breakage if the method's code changes in the future.
 
This is most likely going to be forgotten.

That's what perlcritic is for. :)

Mike

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: [PATCH] (Windows) psql echoes password when reading from pipe
Next
From: Matthew Stickney
Date:
Subject: Re: [PATCH] (Windows) psql echoes password when reading from pipe