Dynamic programming languages are often refered to as 'weakly typed' which means that variables are not bound to a particular type until runtime. For example, C++ is a 'strongly typed language, while Perl is a 'weakly typed' or 'dynamic' language.
A strongly typed language requires that you specify a type:
int i = 0;
In that C++ snippet, an integer names i is created and assigned the value of 0. The following would not compile in C++:
int i = 0;
i = "Hello world";
This would fail because i has been declared to be an integer and can not be assigned a string value. The following code would succeed in a dynamic language like Perl:
i = 0;
i = "Hello world";
The type is not declared here at all, because it is not bound to a type until runtime. In the first statement, i is bound to an integer type but in the second statement it is bound to a string type.
While dynamic language are easier to program in, they are much slower than strongly typed languages and are generally regarded as less safe since checking is not done until run time.