diff --git a/meson.build b/meson.build
index 56454cc3395..54451abe195 100644
--- a/meson.build
+++ b/meson.build
@@ -1060,7 +1060,10 @@ if not perlopt.disabled()
       if cc.get_id() == 'msvc'
         # prevent binary mismatch between MSVC built plperl and Strawberry or
         # msys ucrt perl libraries
-        perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
+        perl_v = run_command(perl, '-V').stdout()
+        if not perl_v.contains('USE_THREAD_SAFE_LOCALE')
+          perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
+        endif
       endif
     endif
 
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 6a79a0e037d..1dc336a54da 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -595,7 +595,9 @@ sub mkvcbuild
 		push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID');
 		# prevent binary mismatch between MSVC built plperl and
 		# Strawberry or msys ucrt perl libraries
-		push(@perl_embed_ccflags, 'NO_THREAD_SAFE_LOCALE');
+		my $perl_v = `$^X -V 2>&1`;
+		push(@perl_embed_ccflags, 'NO_THREAD_SAFE_LOCALE')
+		  unless $perl_v =~ /USE_THREAD_SAFE_LOCALE/;
 
 		# Windows offers several 32-bit ABIs.  Perl is sensitive to
 		# sizeof(time_t), one of the ABI dimensions.  To get 32-bit time_t,