This may be superfluous at this point in time... but, I feel the need to set the record straight on this for those who are newer to the fields of languages and interpreters versus compilers and etc.
BOTTOM LINE: Any language that is not "translated" (aka compiled) into native CPU/machine opcodes is "interpreted"
Java is a language. It is actually interpreted, too. It has the Java VM that is basically an artificial CPU with its own opcodes. JAR files are actually hybrid ZIP files. In all actuality, Java was Sun's attempt to revive itself hoping to create (or subvert) a market for it's now mostly-defunct RISC processors that were drowning in a predominately Intel/Motorola world. (FYI, Java's birthplace was in Pascal and Modula-2/3 from Nik Wirth -- not Smalltalk.)
Perl is a language. It executes in a well-defined interpreted environment (interpreter) that does NOT CONSIST OF MACHINE CODE (aka processor opcodes). Perl's YACC specification reduces to mnemonics that are equivalent to opcodes -- but are not , for example, Intel CPU opcodes.
C is a language. It is preprocessed and compiled down to machine opcodes (Intel or whatever). But, if you wanted to, you could probably generate a compiler to reduce to Java Virtual CPU opcodes, too.
Larry Wall/Perl did not create a separate standalone Java-like Virtual CPU (aka VM) for Perl. (But, it looks like they are trying on Perl 6).
Virtual CPUs (VM) are the ultimate vehicle for malware. You can write a malware once; compile it once; and run it anywhere, too! People dumb enough to keep it running in the SysTray are an accident waiting to happen. ;)
Lex (at least at some point in the past) and YACC were used to create Perl, Bash, and a host of other languages.
Lex and YACC are written in C. Google's former-CEO Eric Schmidt's claim to fame, before becoming a politician, was his work on Lex as an understudy to the great Mike Lesk.
Perl is cool. It's the result of incorporating the core features/capabilities of YACC into a super-versatile text processing language. Any Perl program can become a Turing Machine. Ingenious. (I don't know of any other language that has ever accomplished this feat)
However, because of this interpreter, threading/MP is a little more difficult, unpredictable, and memory-hungry. Careful planning is required.