I have a Perl script which runs fine under Perl 5.005 on HPUX 11i v3 and that causes a small problem under Perl 5.10 on my Ubuntu 11.04 box.
It boils down to a line like:
open (CMD, "do something | grep -E 'sometext$' |");
(it’s actually capturing ps -ef output to see if a process is running but I don’t think that’s important (a)).
Now this runs fine on the HPUX environment but, when I try it out under Ubuntu, I get:
sh: Syntax error: Unterminated quoted string
By inserting copious debug statements, I tracked it down to that offending line then started removing characters one-by-one until it stopped complaining. Luckily, $ was the first one I tried and it stopped giving me the error, so I then changed the line to:
open (CMD, "do something | grep -E 'sometext\$' |");
and it worked fine (under Linux anyway – I haven’t tested that on HPUX since I don’t have access to that machine today – if it does work, I’ll just use that approach but I’d still like to know why it’s a problem).
So it seems obvious that the $ is “swallowing” the closing single quote under my Linux environment but not apparently on the HPUX one.
My question is simply, why? Surely there weren’t any massive changes between 5.005 and 5.10. Or is there some sort of configuration item I’m missing?
(a) But, if you know a better way to do this without external CPAN modules (ie, with just the baseline Perl 5.005 installation), I’d be happy to know about it.
$'is a special variable (seeperldoc perlvar). 5.005 was many versions ago, so it’s possible that something has changed in the regexp engine to make this variable different (although it appears to be in 5.005 also)As for the better way, you could at least only run the ‘ps -ef’ in a pipeline and do the ‘grep’ in perl.