goibhniu has asked for the wisdom of the Perl Monks concerning the following question:
This is a small thing; I had something unexpected happen. I assumed (always a problem) that single-quoted strings didn't interpolate. Ever. In the following situation, I seem to need an escape-character to keep it from interpolating. If it's not interpolating, why do I need the double-backslash?
This is what fails:
producing:#/usr/bin/perl -lW use strict; use warnings; $\="\n"; my $path = 'C:\chas_sandbox\'; my $otherstring = '//Project/State/Task/Server'; print '$path: '.$path; print '$otherstring: '.$otherstring;
C:\chas_sandbox> singlequoteinterp.pl Bareword found where operator expected at C:\chas_sandbox\singlequotei +nterp.pl l ine 9, near "/Project/State" (Missing operator before State?) syntax error at C:\chas_sandbox\singlequoteinterp.pl line 9, near "/Pr +oject/Stat e" Bad name after Server' at C:\chas_sandbox\singlequoteinterp.pl line 9.
It seems to think $path starts with 'C:\ and extends all the way down to the singlequote in my $otherstring = '. The single quote in the middle is escaped by the backslash. It accepts //Project/ as some sort of search and replace regexp on the implied $_, and is confused by State all by itself after that.
This works:
producing:#/usr/bin/perl -lW use strict; use warnings; $\="\n"; my $path = 'C:\chas_sandbox\\'; my $otherstring = '//Project/State/Task/Server'; print '$path: '.$path; print '$otherstring: '.$otherstring;
C:\chas_sandbox> singlequoteinterp.pl $path: C:\chas_sandbox\ $otherstring: //Project/State/Task/Server
I need to escape the backslash so that it doesn't escape the single quote. If it's not interpolating, why do I need to escape anything?
I'm on WindowsXP / Strawberry Perl 5.8:
C:\chas_sandbox> perl -v This is perl, v5.8.8 built for MSWin32-x86-multi-thread Copyright 1987-2006, Larry Wall Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge.
#my sig used to say 'I humbly seek wisdom. '. Now it says:
use strict;
use warnings;
I humbly seek wisdom.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Interpolation in Single-quotes?
by psini (Deacon) on May 13, 2008 at 19:34 UTC | |
by goibhniu (Hermit) on May 13, 2008 at 19:40 UTC | |
Re: Interpolation in Single-quotes?
by duff (Parson) on May 13, 2008 at 19:32 UTC | |
Re: Interpolation in Single-quotes?
by 5mi11er (Deacon) on May 13, 2008 at 19:33 UTC | |
Re: Interpolation in Single-quotes?
by toolic (Bishop) on May 13, 2008 at 20:04 UTC | |
by goibhniu (Hermit) on May 13, 2008 at 20:13 UTC |