diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 87728fefa32..5a3c5ad5ff1 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -43,6 +43,7 @@
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2023 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
 ;;; Copyright © 2023 Timo Wilken <guix@twilken.net>
+;;; Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -75,6 +76,8 @@ (define-module (gnu packages check)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-check)
+  #:use-module (gnu packages php)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-check)
@@ -97,6 +100,7 @@ (define-module (gnu packages check)
   #:use-module (guix build-system go)
   #:use-module (guix build-system guile)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
@@ -3119,6 +3123,69 @@ (define-public python-pyhamcrest
 allowing you to declaratively define \"match\" rules.")
     (license license:bsd-3)))
 
+(define-public tidyall
+  (package
+    (name "tidyall")
+    (version "0.83")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/D/DR/DROLSKY/Code-TidyAll-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "18awq4fb72pbfdrc8h1cdvbwwbp456pnz6aam1cgq5vb7b85580n"))))
+    (build-system perl-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (delete 'remove-command-line-tool)
+                        (add-after 'install 'wrap-programs
+                          (lambda* (#:key outputs #:allow-other-keys)
+                            (let ((out (assoc-ref outputs "out")))
+                              (wrap-program (string-append out "/bin/tidyall")
+                                `("PERL5LIB" ":" prefix
+                                  (,(getenv "PERL5LIB")
+                                   ,(string-append out
+                                                   "/lib/perl5/site_perl"))))))))))
+    (native-inputs (list perl-test-class-most perl-test-differences
+                         perl-test-fatal perl-test-warnings perl-lib-relative))
+    (inputs (list php bash-minimal))
+    (propagated-inputs (list perl-capture-tiny
+                             perl-config-ini
+                             perl-timedate
+                             perl-file-which
+                             perl-ipc-run3
+                             perl-ipc-system-simple
+                             perl-list-compare
+                             perl-list-someutils
+                             perl-log-any
+                             perl-module-runtime
+                             perl-moo-2
+                             perl-path-tiny
+                             perl-scope-guard
+                             perl-specio
+                             perl-specio-library-path-tiny
+                             perl-text-diff
+                             perl-time-duration-parse
+                             perl-try-tiny
+                             perl-parallel-forkmanager
+                             perl-file-pushd))
+    (home-page "https://metacpan.org/release/Code-TidyAll")
+    (synopsis "Engine for tidyall, your all-in-one code tidier and validator")
+    (description
+     "@command{tidyall} makes a lot of code tidiers and validators available
+from a single unified interface.  You can run @command{tidyall} on a
+single file or on an entire project hierarchy, and configure which
+tidiers/validators are applied to which files.  @command{tidyall} will
+back up files beforehand, and for efficiency will only consider files
+that have changed since they were last processed.
+
+Note that if you see some missing tidier or validator modules error,
+you can let tidyall load them after install them.  For example, one
+can run @code{guix shell perl-perl-tidy perl} in advance to load
+@code{Perl::Tidy}.")
+    (license license:perl-license)))
+
 (define-public unittest-cpp
   (package
     (name "unittest-cpp")
