http://qs321.pair.com?node_id=151366


in reply to Re: Re: question about perl
in thread How do I change the shebang line for all perl scripts in a directory

Yeah, I know about the "anywhere in the script" thingy, but
perl -pi.bak -e 's[^#!/usr/local/bin/perl][#!/usr/bin/perl]' *.pl
yields a "/usr/local/bin/perl][: Event not found." error on my Perl 5.6.1 system, which is why I didn't post my original answer with an anchor metacharacter. Don't really know why the "^#!" is freaking out the regex, but on further examination it looks like the ! has to be escaped. I've corrected the code in my original post to compensate.

And all of this:

perl -pi.bak -e 'BEGIN{$c=@ARGV};s[^#!/usr/local/bin/perl][#!/usr/bin/ +perl] && $c-- if $c> @ARGV' *.pl
can replaced with this:
perl -pi.bak -e 'BEGIN{undef $/};s[^#\!/usr/local/bin/perl][#\!/usr/bi +n/perl]' *.pl
...which at least saves some typing, and is a bit more understandable besides. :-D

Gary Blackburn
Trained Killer

Update: The exclamation mark needs escaping because I'm using tcsh, a csh-style shell. Anyone using a different type of shell (such as bash or other Bourne-type shell) shouldn't have to escape the ! at all. What a pain in the butt... :-(