diff --git a/pkgs/development/perl-modules/TextBibTeX-use-lib-on-aarch64.patch b/pkgs/development/perl-modules/TextBibTeX-use-lib-on-aarch64.patch
new file mode 100644
index 00000000000..42fa3728680
--- /dev/null
+++ b/pkgs/development/perl-modules/TextBibTeX-use-lib-on-aarch64.patch
@@ -0,0 +1,11 @@
+--- a/Build.PL
++++ b/Build.PL
+@@ -88,7 +88,7 @@ if ( $^O =~ /mswin32/i ) {
+     }
+ }
+ else {
+-    if ( $Config{archname} =~ /^x86_64|^ppc64|^s390x|^aarch64|^riscv64/ ) {
++    if ( $Config{archname} =~ /^x86_64|^ppc64|^s390x|^riscv64/ ) {
+         $libdir =~ s/\bbin\b/lib64/;
+         if ( !-d $libdir ) {
+             my $test = $libdir;
diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix
index ae318b1d3f9..7bcdf6190c8 100644
--- a/pkgs/top-level/perl-packages.nix
+++ b/pkgs/top-level/perl-packages.nix
@@ -21787,6 +21787,8 @@ let
       url = "mirror://cpan/authors/id/A/AM/AMBS/Text-BibTeX-0.88.tar.gz";
       sha256 = "0b7lmjvfmypps1nw6nsdikgaakm0n0g4186glaqazg5xd1p5h55h";
     };
+    # libbtparse.so: cannot open shared object file (aarch64 only)
+    patches = [ ../development/perl-modules/TextBibTeX-use-lib-on-aarch64.patch ];
     perlPreHook = "export LD=$CC";
     perlPostHook = lib.optionalString stdenv.isDarwin ''
       oldPath="$(pwd)/btparse/src/libbtparse.dylib"