in reply to Re^3: Troubleshooting question
in thread Troubleshooting question

Just to clarify $d is NOT a perl variable it is a switch operator used by sed, which I believe is a regular exprssion type of command in UNIX/Linux. Also I believe there already is something similar to what you are proposing in the code already:
$bkp_info = `sed -e :a -e "{$d;N;2,3ba}" -e "{P;D}" /db2/$DB2DBDFT/Mes +sages/temp.txt`;

I am not sure if there is much difference in having the key word "my" in front of the variable that you have versus not having it. I have changed the backticks to double quotes and I have also tried using the curly braces as well in conjunction with and without backticks and/or double quotes all to no avail.

I will try your suggestion and let you know the outcome. Thanks for replying. Could this be a bug?

Replies are listed 'Best First'.
Re^5: Troubleshooting question
by moritz (Cardinal) on Mar 23, 2010 at 18:08 UTC
    I am not sure if there is much difference in having the key word "my" in front of the variable that you have versus not having it

    That's not the crucial point.

    What's important is that I assign the contents, not the results of the backticks operation to a variable - and by doing that, I can use a different quoting constructor (single quotes).

    Could this be a bug?

    I don't see a bug; I just see a bug in your understanding of nested quoting constructs (which is not surprising, because three different ones appear: backticks, shell interpolation and shell interpolation in double-quoted strings).

    Perl 6 - links to (nearly) everything that is Perl 6.
      Thanks for clarifying my bug. Like I said I am coming in after someone and trying to clean up their code which had errors to begin with. I have tried it all ways with backticks without and every other permutation there of and when I used your code: my $sed_command = 'sed -e :a -e '$d;N;2,3ba' -e 'P;D' /db2/$DB2DBDFT/Messages/temp.txt'; I got this: Scalar found where operator expected at report.pl line 187, near "'sed -e :a -e '$d" (Missing operator before $d?) syntax error at report.pl line 187, near "'sed -e :a -e '$d" Bad name after ba' at report.pl line 187. Any who I got rid of that code plus 3 other lines and I get the same output from the email without any errors. This just illustrates the importance of commenting code because people come behind you and have to deal with your programs after you are long gone. Oops I couldn't my opinions to myself. THANK YOU to all of you that responded. I appreciate your help and explanations.
Re^5: Troubleshooting question
by JavaFan (Canon) on Mar 23, 2010 at 22:42 UTC
    Also I believe there already is something similar to what you are proposing in the code already:
    $bkp_info = `sed -e :a -e "{$d;N;2,3ba}" -e "{P;D}" /db2/$DB2DBDFT/Mes +sages/temp.txt`;
    Similar on first appearance, but fundamentally different.

    As far as Perl is concerned, (and Perl goes first, then the shell, and only then it's seds turn), in the above line, $d is Perl variable. If you want to pass $d to shell you first need to protect against Perl, then against the shell. The above code does neither. In:

    my $cmd = q{sed -e :a -e '{$d;N;2,3ba}' -e "{P;D}" /db2/$DB2DBDFT/Mess +ages/temp.txt}; $bkp_info = `$cmd`;
    the $d to protected against both. The q{} construct makes Perl not interpolate variables (unlike the backticks). And the single quotes makes the shell not interpolate variables (unlike the double quotes).