diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml
index c20a5e01f5..2cfa733b53 100644
--- a/pmd-dist/pom.xml
+++ b/pmd-dist/pom.xml
@@ -103,6 +103,11 @@
pmd-matlab
${project.version}
+
+ net.sourceforge.pmd
+ pmd-perl
+ ${project.version}
+
net.sourceforge.pmd
pmd-objectivec
diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml
new file mode 100644
index 0000000000..4e3a5c1a42
--- /dev/null
+++ b/pmd-perl/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+ pmd-perl
+ PMD Perl
+
+
+ net.sourceforge.pmd
+ pmd
+ 5.5.0-SNAPSHOT
+
+
+
+ ${basedir}/../pmd-core
+
+
+
+
+
+ ${basedir}/src/main/resources
+ true
+
+
+
+
+ maven-resources-plugin
+
+ false
+
+ ${*}
+
+
+
+
+
+ net.sourceforge.pmd
+ pmd-build
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+
+
+ pmd-clean
+ clean
+
+
+ PMD specific tasks: cleaning generated markdown
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+
+
+
+
+ net.sourceforge.pmd
+ pmd-core
+
+
+ org.mozilla
+ rhino
+
+
+
+ net.sourceforge.pmd
+ pmd-test
+ test
+
+
+
diff --git a/pmd-perl/src/main/java/net/sourceforge/pmd/cpd/PerlLanguage.java b/pmd-perl/src/main/java/net/sourceforge/pmd/cpd/PerlLanguage.java
new file mode 100644
index 0000000000..ff2863acaa
--- /dev/null
+++ b/pmd-perl/src/main/java/net/sourceforge/pmd/cpd/PerlLanguage.java
@@ -0,0 +1,10 @@
+/**
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+package net.sourceforge.pmd.cpd;
+
+public class PerlLanguage extends AbstractLanguage {
+ public PerlLanguage() {
+ super("Perl", "perl", new PerlTokenizer(), ".pm", ".pl", ".t");
+ }
+}
diff --git a/pmd-perl/src/main/java/net/sourceforge/pmd/cpd/PerlTokenizer.java b/pmd-perl/src/main/java/net/sourceforge/pmd/cpd/PerlTokenizer.java
new file mode 100644
index 0000000000..2cd01e19f7
--- /dev/null
+++ b/pmd-perl/src/main/java/net/sourceforge/pmd/cpd/PerlTokenizer.java
@@ -0,0 +1,20 @@
+/**
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+package net.sourceforge.pmd.cpd;
+
+import java.util.ArrayList;
+
+public class PerlTokenizer extends AbstractTokenizer {
+ public PerlTokenizer() {
+ this.stringToken = new ArrayList<>();
+ this.stringToken.add( "\'" );
+ this.stringToken.add( "\"" );
+
+ this.ignorableCharacter = new ArrayList<>();
+
+ this.ignorableStmt = new ArrayList<>();
+
+ this.spanMultipleLinesString = true;
+ }
+}
\ No newline at end of file
diff --git a/pmd-perl/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-perl/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language
new file mode 100644
index 0000000000..40f6f3a026
--- /dev/null
+++ b/pmd-perl/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language
@@ -0,0 +1 @@
+net.sourceforge.pmd.cpd.PerlLanguage
diff --git a/pmd-perl/src/site/markdown/index.md b/pmd-perl/src/site/markdown/index.md
new file mode 100644
index 0000000000..251674558c
--- /dev/null
+++ b/pmd-perl/src/site/markdown/index.md
@@ -0,0 +1,5 @@
+# PMD Perl
+
+Contains the PMD implementation to support the Perl programming language.
+
+Only very basic CPD support is implemented currently.
diff --git a/pmd-perl/src/site/site.pre.xml b/pmd-perl/src/site/site.pre.xml
new file mode 100644
index 0000000000..c8294e1b52
--- /dev/null
+++ b/pmd-perl/src/site/site.pre.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index c3ca76f94b..772da1935e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -932,6 +932,7 @@
pmd-jsp
pmd-matlab
pmd-objectivec
+ pmd-perl
pmd-php
pmd-plsql
pmd-python