http://www.perlmonks.org?node_id=1052145


in reply to Re^2: how to use perl variable in system command to run on unix
in thread how to use perl variable in system command to run on unix

q does not expand variables, for that you need qq e.g.
% perl -E '$x = "hello"; say q($x)' $x % perl -E '$x = "hello"; say qq($x)' hello

Replies are listed 'Best First'.
Re^4: how to use perl variable in system command to run on unix
by tousifp (Novice) on Sep 03, 2013 at 17:28 UTC

    Thank you very much. But why $9 is escaped? Me new to perl !!!

      Because $9 is a variable in Perl, the ninth capture in a regular expression. Since you don't have a regex before, it is an undefined variable in your case, so il will be omitted altogether from your command line. If you escape the $ sign, you say that you want a $ sign, not a variable called $9. Then it is not interpolated and passed to awk correctly.

        Thanks buddy.

      Because in this case you want a literal "$9", you don't want it to be expanded by Perl. An example that you can experiment with:
      % date Wed Sep 4 10:41:55 BST 2013 % date | awk '{ print $2 }' Sep % perl -de0 Loading DB routines from perl5db.pl version 1.32 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 0 DB<1> $cmd = qq[date | awk '{ print $2 }'] DB<2> p $cmd date | awk '{ print }' DB<3> p qx/$cmd/ Wed Sep 4 10:47:41 BST 2013 DB<4> $cmd = qq[date | awk '{ print \$2 }'] DB<5> p $cmd date | awk '{ print $2 }' DB<6> p qx/$cmd/ Sep DB<7> q %
        Thanks. I got it. Will try your code later surely.