The first thing to do is get rid of all of the #define and #include
statements, which are nothing more than Perl comments.  Note that multiline
define statements have been used to allow for Perl commands that don't make
sense in C -- these simply become definitions.

Once the initial #include and #define lines have been removed, we are left
with declarations for two subroutines:

        sub main {}
        sub struct {}

Next, we take advantage of Perl's willingness to accept function arguments
without parentheses and call struct on the eval block.  The eval block
itself uses this same feature plus Perl's ability to use barewords as
variables to call the function int with an argument of number and then
multiply the variable char by name.


Removing the next #define statement and collapsing the three lines, we get

        int main (void).1;

1 is catenated with the result of the function call to main and the result
passed to int.

The next line

        struct eval subver;

uses similar logic, calling eval on subver and then passing it to the
do-nothing struct subroutine.

        SETSUBVER;

Is functionally equivalent to saying
        
        0;

The Perl printf function is remarkably like the C printf library function,
so these behave identically, except that subver.number is the catenation of
0 and 0 in perl while it is assigned a value using SETSUBVER for the C
program.


Likewise, the if...else statement is syntactically the same in Perl and C,
though for the Perl version, the if statement could equally be written as

        if (0 == 1)
        
Ensuring that both the C and Perl versions will correctly identify which
they are.

Lastly, we call printf and exit, taking advantage of the fact that a
substantial number of important Perl functions bear a strange resemblance to
certain C keywords and library routines.


