A key of "needs_compiler" raises the question, "for what language?" "Compiler" does not necessarily mean "C compiler". PDL likes to have a Fortran compiler, Inline::Java needs a Java compiler, and so on.
So the value would be a list of languages. # Any ol C compiler will do compiler => 'C' # We specifically need a C99 compiler compiler => 'C99' # Both a C and Fortran 77 compilers are needed (for example, PDL) compiler => ['C', 'Fortran77'] As for whether or not the compiler is optional, declare it same as any other dependency. Then no special syntax is needed and it will expand as Module::Build's dependency handling expands. # Most XS modules only need a C compiler to build build_requires => { compiler => 'C' } # But some things, like Inline::C, need it to run requires => { compiler => 'C' } "compiler" becomes a special key in the dependency field. This makes me a little nervous as it could clash with a module called "compiler". Perhaps it should have a non-package character in the name such as "-compiler".