|
Posted by John W. Krahn on April 4, 2008, 2:19 pm
Please log in for more thread options David Harmon wrote:
> On Fri, 4 Apr 2008 07:27:32 -0700 (PDT) in comp.lang.perl.misc,
> tazommers@yahoo.com wrote,
>> CMD="perl -p -i -n -e "'"s/^5(.)$EFF_DATE/5\$1|$REP_DATE/g"'"
>> $FILE"
>> eval $CMD
>>
>> I don't want that "|" character, but I need something to separate the
>> $1 for the perl group and the $REP_DATE from the ksh. The $REP_DATE
>> gets replaced in ksh with the string 080407 for instance, so how does
>> one separate the $1 group from the string 080407?
>
> Does writing $1 as do it?
>
> But you are essentially replacing $1 with itself! That seems
> gratuitous to me. The stuff before $EFF_DATE is just context and
> should not participate in the replacement operation. Why not an
> expression something more like:
>
> s/(?<=^5.)$EFF_DATE/$REP_DATE/
Another way to do it:
/^5/ && substr( $_, 69 ) =~ s/^$EFF_DATE/$REP_DATE/
> The /g should not be necessary, you only want one replacement per
> line anyway.
>
> I can't figure you would need both the -p and -n switches.
From perlrun.pod under the '-p' entry: "A -p overrides a -n switch." so
the -n switch in the OP's example is superfuous.
John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall
|