Zhao Peng writes:

> Thanks a lot for your help. I have 3 derived questions from your script.

No problem, glad to help.

> Question 1:
> For the back references, you used ${1} for the 1st captured buffer,
> while some books/people simply use $1, I'm wondering if you use {} as
> an extra caution to make sure it refers to the 1st captured buffer in
> case there are some digits followed.

No, I wrote it this way just to make the code clear -- there wasn't a
technical reason for this.

>
> Question 2:
> line 1>   perl -i.bak \
> line 2>        -pe 's/ \$(\d+)\. / \$ebcdic${1}. /g;
> line 3>             s/ (\d+)\. / s370ff${1}. /g;'     \
> line 4>        your-directory-somewhere/*readme*
>
> On the end of line 1 and 3, you have a back slash. Is it for
> separating input to separated lines for better readability? If so, why
> is there no back slash on the end of line 2?

There is no backslash on line 2 because the shell knows that it is
reading a literal string and that the end of the string is marked by
the trailing single-quote (') character.

Just to be absolutely clear, this has nothing to do with Perl.  This
notation has everything to do with the shell.  If you're using Linux,
your shell might be something like bash or csh or zsh.

To see what is going on here you might try typing

    echo hello there
 
    echo hello \
    there

    echo 'hello\nthere'

    echo "hello\nthere"

    echo $PATH

    echo "$PATH"

    echo '$PATH'


...into your shell (especially the first two examples).


> Question 3:
> You used a period "." after ${1}, wouldn't it be safe to use "\." as
> the original string only ends with a period and we don't want to
> change it? I think "." can match any single character except a newline.

No...it wouldn't be safer to use "\." instead of "." in the
replacement part of the expression because the notation of "." only
has the semantics of "(generally) match any character except newline"
in the *match* part of the expression, *not* in the replacement part
of the expression.

Perhaps this example helps illustrate this?

   echo "2a" | perl -pe 's/\d./hello./'


That last "." is interpreted fairly literally in this context.



Regards,

--kevin
-- 
GnuPG ID: B280F24E              Never could stand that dog.
alumni.unh.edu!kdc                   -- Tom Waits

_______________________________________________
gnhlug-discuss mailing list
gnhlug-discuss@mail.gnhlug.org
http://mail.gnhlug.org/mailman/listinfo/gnhlug-discuss/

Reply via email to