Unfair to Pascal. Pascal offers some real creative possibilities. I'm referring of course to classics like Borland Turbo Pascal up to about 6.0 (i.e. DOS, before everything went silly)
(1) you can define a variable as one type but type-cast it to another every time you use it.
(2) you can just reserve great chunks of memory, point at it with a pointer, and cast your pointer to point to anything you like. Of course there's absolutely no reason why the pointer should remain pointing at the region of memory you reserved.
(3) it has a built-in assembler, which means you can do all the normal cute things, like call obscure BIOS interrupts, or write self-modifying graphics code in the middle of an otherwise innocent unit.
(4) you can do all sorts of lovely things like define a text constant in a Pascal unit, and, knowing that it is the first thing in that unit's code segment, fill it with code and call it in an assembler procedure by pushing zero and executing a near ret.
(5) you can even define procedures as called by interrupts, but much more fun is just defining them as a normal assembler procedure, and ending them like an interrupt anyway, and then pointing an interrupt vector at them. Then they can run at any moment in your code, even when the ds register doesn't point to the data-segment. So if they need data, you have to store it somewhere in your current code segment.
(6) and don't make me feel guilty about all this. Pascal encourages it. Just look at the numerical coprocessor emulation: an interrupt which overwrites its own call with coprocessor instructions if one is present, but otherwise does the maths. Niiiice.
I gather someone stuck object orientated programming in TP5, but I think they only did it to add interest, not to make life simpler. Anyway, one can always ignore it.