PerlAs the name "Practical Extraction and Report Language" coins out, Perl is a programming language which aims at being effective in practice, not at developing a nice and simple semantics (though whenever nice things are effective, Perl does them too). Thus after a short learning time, it becomes a great tool for jobs of interfacing software, converting file formats, making small network daemons, etc. Perl is perfectly adapted to the Unix philosophy and practice. However, it is a bad choice when long-term/wide-area consistency is required.
The principal advantage of Perl is that you can quickly hack up a working program to do text/binary manipulations that would be quite cumbersome using previous tools, that were either too generic, with a cumbersome interface to Internet-standard human-readable files, or too specific, unable to express more complex file manipulations. Perl allows you to do things in tons of different ways, so everyone can find one that fits his taste and thinking pattern.
The principal disadvantage of Perl is that, allowing too many things as
valid programs, it makes it difficult to specify and verify bugs out;
the terse syntax that makes hacking quicker makes debugging slower. This
is typical of traditional non-metaprogramming development, where a
compromise between writeability and readability is needed: only a
metaprogramming environment could help transform a valid program into a
clean valid program of equivalent meaning.