There are some differences between 'constant' and 'variable' in different languages, for example in java - http://stackoverflow.com/questions/50...
I would call puppet's variables Immutable, but the wording used by the official documentation is
Unlike most other languages, Puppet
only allows a given variable to be
assigned once within a given scope.
You may not change the value of a
variable, although you may assign a
different value to the same variable
name in a new scope:
By making the variables unable to be reassigned within the same scope, you fit more nicely in the declarative style that puppet is based around, and you help remove different classes of problems that can occur with variables that can be modified. Now that puppet4 has support for different functions that work on collections, it makes it much eaiser to work in a style where you either iterate, map, or reduce across a collection instead of reassigning variables. You also can gather up a collection of different variables and join them together instead of constantly appending the previous variable with an additional value.