| From: | Mike Blackwell <maiku41(at)gmail(dot)com> |
|---|---|
| To: | Michael Paquier <michael(at)paquier(dot)xyz> |
| Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: [PATCH] Clear up perlcritic 'missing return' warning |
| Date: | 2018-05-22 20:35:10 |
| Message-ID: | CAESHdJoFenPdc=XfrzM5m9wCGqfHEbum0eQ4UwYRDGw+8vxOyA@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Tue, May 22, 2018 at 3:32 AM, Michael Paquier <michael(at)paquier(dot)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
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Matthew Stickney | 2018-05-22 20:56:40 | Re: [PATCH] (Windows) psql echoes password when reading from pipe |
| Previous Message | Tom Lane | 2018-05-22 20:09:06 | Re: [PATCH] (Windows) psql echoes password when reading from pipe |