diff -ubr PAR-Packer/myldr/Makefile.PL PAR-Packer-0.992_04/myldr/Makefile.PL
--- a/myldr/Makefile.PL	2009-09-23 12:52:47.618181500 +0200
+++ b/myldr/Makefile.PL	2009-09-28 13:24:45.000000000 +0200
@@ -212,7 +212,7 @@
 PERL=$perl
 LD=$ld
 CC=$cc
-CFLAGS=$cflags
+CFLAGS=$cflags -DPARL_EXE=\\"parl$exe\\"
 LDFLAGS=$Config{ldflags}
 PERL_LDFLAGS=$ldflags
 STATIC_LDFLAGS=$static_ldflags
diff -ubr PAR-Packer/myldr/mktmpdir.c PAR-Packer-0.992_04/myldr/mktmpdir.c
--- a/myldr/mktmpdir.c	2009-09-28 12:29:14.134471200 +0200
+++ b/myldr/mktmpdir.c	2009-09-30 09:57:07.188241200 +0200
@@ -160,6 +160,29 @@
     if (progname == NULL)
         progname = argv[0];
 
+    /* If invoked as "/usr/bin/parl foo.par myscript.pl" then progname should
+     * be ".../parl", and we don't want to base our checksum on that, but
+     * rather on "foo.par".
+     */
+    {
+#ifdef WIN32
+#define STREQ(a,b) (strcasecmp(a,b) == 0)
+#else
+#define STREQ(a,b) (strcmp(a,b) == 0)
+#endif
+	int prog_len = strlen(progname);
+	int parl_len = strlen(PARL_EXE);
+
+	if (prog_len >= parl_len
+	    && STREQ(progname + prog_len - parl_len, PARL_EXE)
+	    && (prog_len == parl_len || progname[prog_len - parl_len - 1] == dir_sep[0])
+	    && argv[1]
+	    && strlen(argv[1]) >= 4
+	    && STREQ(argv[1] + strlen(argv[1]) - 4, ".par"))
+		progname = argv[1];
+#undef STREQ
+    }
+
     if ( !par_env_clean() && (f = open( progname, O_RDONLY | OPEN_O_BINARY ))) {
         lseek(f, -18, 2);
         read(f, buf, 6);
