If a company is after an experienced person then they want someone who can come up to speed with their codebase quickly. This means they do not want to spend time training someone in the languages and preferably the frameworks used.
Yes for a permanent position they will also try to get people who can do other things and in a year or two's time the person will probably not be doing the same job.
For a contractor you mist know the languages immediately, they need the person to cover a gap in their knowledge or resourses immediately. You won't be expected to know their codebase but would be expected to answer a question on the language or common library in the first few days to help a coworker debug an issue. In many cases you will not be there long enough to learn their codebase.
If you are a contractor then you learn on your own time - the company will not pay you to learn new things, well at least until you have shown you are above average in doing things then they might allow this as they know they will get a payback.
Basically you can't tell during a hiring process how good someone is (you can find out if they are bad) and so the company will look at how well you have done after some time and make a view as to wether it is worth spending resources to get you to do something different.
Unfortunately many companies have this attitude to permeant employees and don't give enough time for training etc.