http://www.perlmonks.org?node_id=141715


in reply to Blowfish using Inline::C

Names beginning with _ are reserved for the (update: C) implementation or the C standard1. Thus this code invokes undefined behavior, meaning that it can do anything on a standards-complaint compiler.

(This does not necessairly mean you can't have an XS function called "_foo"; if you write directly in XS code you do not need to make a corresponding C function (update: (2) beginning the same as the XS function's name) for every XS function, however Inline::C does not appear to allow you to "declare" functions like that.)

1: My reading of the C draft standard (it's not the final document but likely to be very, very similar to the latest one) would seem to indicate that not all "names" are reserved for all purposes; it seems that labels and structure and union members can use names starting with _ followed by a lower case letter without problem. update: function-scoped variables and, I think, #defines should also be exempt for the same class of names. (Thanks to Zaxo for helping me fiquire this out.)