Cheolsoo Park created PIG-2931:
----------------------------------

             Summary: $ signs in the replacement string make parameter 
substitution fail
                 Key: PIG-2931
                 URL: https://issues.apache.org/jira/browse/PIG-2931
             Project: Pig
          Issue Type: Bug
    Affects Versions: 0.10.0
            Reporter: Cheolsoo Park
            Assignee: Cheolsoo Park
             Fix For: 0.11


To reproduce the issue, use the following pig script:
{code:title=test.pig}
a = load 'data';
b = filter by $FILTER;
{code}

and run the following command:
{code}
pig -x local -dryrun -f test.pig -p FILTER="(\$0 == 'a')"
{code}

This generates the following script:
{code:title=test.pig.substituted}
a = load 'data';
b = filter by ($FILTER == 'a');
{code}

However this should be:
{code}
a = load 'data';
b = filter by ($0 == 'a');
{code}

This is because Pig calls replaceFirst() with a replacement string that include 
a $ sign as follows:
{code}
"$FILTER".replaceFirst("\\$FILTER", "($0 == 'a')"));
{code}

To treat $ signs as literals in the replacement string, we must escape them. 
Please see the [Java 
doc|http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html#replaceFirst(java.lang.String)]
 for Matcher class for explanation:
{quote}
Note that backslashes (\) and dollar signs ($) in the replacement string may 
cause the results to be different than if it were being treated as a literal 
replacement string. Dollar signs may be treated as references to captured 
subsequences as described above, and backslashes are used to escape literal 
characters in the replacement string.
{quote}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to