Is PERL an interpreted or compiled programming language?

Perl is both compiled and interpreted language.

In the traditional sense, Perl is a pure interpreted language. The reference Perl program is a prototypical two-stage interpreter: when a Perl script is invoked via #!/bin/perl (or similar), the perl interpreter performs a language parsing on the source code, creating an internal (to the perl interpreter) representation of program, which is then translated into binary code for execution. Every invocation of a perl program requires this translation/interpretation to be completed.

There are several projects which can take perl source code and compile it down to a binary executable (that is, bypass the whole repeated translate/interpret phase each time). However, these are NOT complete - even the best can only manage about 95% of the perl code available. That is, these perl compiler are incomplete implementations of the Perl language. They can be very useful, but are not complete substitutes for the Perl interpreter.

The real answer is that Perl was designed to be an interpreted language from the start; attempts to turn Perl into a compiled language are faced with the difficulty of Perl's sprawling syntax and complete lack of design for compilation, and thus, struggle to implement all the languages features in a compiler.