Trying to come up with a way to write cross-platform, shell safe perl one-liners was causing me to lose sleep. So I've given up one trying to write One Unified One Liner and instead took a page from the perl core test suite's t/test.pl run_perl().
There is now a perl_oneliner() method which given some perl code and switches will generate a safe one liner. Overrides have been put in MM_Win32, MM_Unix and MM_VMS to do the escapes and quoting appropriate for that platform. After playing with it some, I added suport for newline escaping (which could probably be improved to use multiple -e's) and stripping of leading/trailing newlines. It doesn't do everything, just enough to handle the code I've thrown at it so far. If the VMS and Win32 folks could examine their versions of perl_oneliner() to make sure I got it right. Also, we need one for MacOS Classic. The end result? Instead of this: return <<'MAKE_FRAG'; dist : $(DEFAULT) $(NOECHO) $(PERL) -le "print 'Warning: Makefile possibly out of date with $(VERSION_FROM)' if -e '$(VERSION_FROM)' and -M '$(VERSION_FROM)' < -M '$(MAKEFILE)';" MAKE_FRAG you can do this: my $date_check = $self->perl_oneliner(<<'CODE', ['-l']); print 'Warning: Makefile possibly out of date with $(VERSION_FROM)' if -e '$(VERSION_FROM)' and -M '$(VERSION_FROM)' < -M '$(MAKEFILE)'; CODE return sprintf <<'MAKE_FRAG', $date_check; dist : $(DEFAULT) $(NOECHO) %s MAKE_FRAG so the code formatting is natural and you don't have to worry about quoting. The end result in the Makefile is icky: dist : $(DIST_DEFAULT) $(NOECHO) $(PERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''\ if -e '\''$(VERSION_FROM)'\'' and \ -M '\''$(VERSION_FROM)'\'' < -M '\''$(MAKEFILE)'\'';' but its more important that the MakeMaker code is easy to maintain than the resulting Makefile. The real win is that with the ability to generate portable one-liners, a whole slew of duplicate method overrides in MM_VMS and MM_Win32 that are just there to change quoting from ' to " go away. So, if anyone has a little free time you can start running through the MM_Unix code and replacing ad-hoc one-liners with perl_oneliner() generated code. -- Michael G. Schwern <[EMAIL PROTECTED]> http://www.pobox.com/~schwern/ Perl Quality Assurance <[EMAIL PROTECTED]> Kwalitee Is Job One "Please hold while reality is adjusted to match my ideal world." -- njt