geo555: I don't see how this is unexpected - Nearly all languages that have a "namespace" or "module" concept restrict namespace/module names to valid identifiers. This is so the module can be referenced within the code.
* Python allows running scripts with invalid identifiers, however it doesn't allow importing modules with invalid identifiers without import trickery. I believe Ruby also has a similar restriction. * C++ requires namespaces to be valid identifiers. * Java requires packages to be valid identifiers. C and C++ both allow for _including_ files with arbitrary names, however that is because the inclusion is handled by the preprocessor - there is no way to use the name of an included file in the same way you would use a module name.