Here are the 3 things which I think you can't do in Perl:
- OS kernel - A complete OS kernel can't even be written in pure C, you have to have assembler code for the really low-level/device-specific stuff. So certainly I would say a higher level language like Perl cannot be used by itself to write a kernel.
- Real-Time - Perl is slow, because it isn't C. In most apps, you could argue that "maybe you wouldn't want to do it in Perl, but you could, if you wanted to". However, in real-time apps, there is no such option - if the app can't work fast enough, it isn't real-time...
- Embedded - Perl will never be the laguage of choice for writing embedded apps. I'm not talking about WinCE apps, I'm talking embedded - those really really tiny apps, where every byte counts. Nowhere to cram perl, or accomodate the overhead of a high-level language...
Now, it could be argued that with XS and/or inlined code you could do the first 2 of the above (I see no way to get past the space limitations of embedded apps), but at what point does that code stop being Perl and start being C/Assembler?
Last but not least - I don't care that Perl can't do those things. I love Perl for what it can do, not inspite of what it cannot do :)