in reply to Help with script recognizing variable in string

http://perldoc.perl.org/perlintro.html#Basic-syntax-overview, URI::QueryParam...
  • Comment on Re: Help with script recognizing variable in string

Replies are listed 'Best First'.
Re^2: Help with script recognizing variable in string
by TonyNY (Beadle) on Jun 20, 2018 at 02:40 UTC
    Actually using double quotes instead of single quotes worked...loving perl more and more!
      This works if the compiler can unambiguously recognize the end of the embedded variable name, for example if the variable name is followed by a space or a punctuation symbol.

      If it is difficult to know where the variable name ends, you can use the following syntax: ${bfcomputer} to clarify.

        Hi Laurent, The return I get when using ${bfcomputer} yields all of the computers of the site not the computer supplied as the command line argument, but again for some reason when I use double quotes it works. Could this have something to do with using the system command on a Solaris box?
        I stand corrected Laurent, when I tested putting the variable in curly braces I forgot to change the single quotes to double quotes so the curly braces with the double quotes works, thanks!

      Hmmm, watch out double quotes could lead to problems if you had other variable-looking items, e.g. those prepended by a sigill ($,%,@,&,etc.) in your string and perl would want to interpolate them too! If they happen to exist, perl would be eager to replace them, if they do not exist perl will replace them with empty unless you used use strict; use warnings;

      Why don't you build your $bfquery as a sequence of string concatenations using single quotes or variable contents, for example:

      $bfquery= # this is a string in single quotes so nothing is interpolated 'query?relevance=%28names%20of%20it%2C%20ip%20addresses%20of%20it +%2C%20root%20server%20of%20it%2C%20operating%20systems%20of%20it%2C%2 +0 last%20report%20time%20of%20it%2C%20agent%20versions%20of%20it%2C%20va +lues%20of%20results%20from%20%28BES%20Property%20%22_SupportGroup%22% +29%20of%20it%29%20of%20bes%20 computers%20whose%20%28%20name%20of%20it%20as%20lowercase%20starts%20w +ith%20%22' # add to this the value of this perl variable . $bfcomputer # and also this fixed string . '%22%29' # end of concatenation ;

        Hi bliako, when trying to concatenate I get the following errors

        $bfquery= # this is a string in single quotes so nothing is interpolated 'query?relevance=%28names%20of%20it%2C%20ip%20addresses%20of%20it +%2C%20root%20server%20of%20it%2C%20operating%20systems%20of%20it%2C%2 +0 +last%20report%20time%20of%20it%2C%20agent%20versions%20of%20it%2C%20v +a +lues%20of%20results%20from%20%28BES%20Property%20%22_SupportGroup%22% +29%20of%20it%29%20of%20bes%20computers%20whose%20%28%20name%20of%20it +%20as%20lowercase%20starts%20 +with%20%22' # add to this the value of this perl variable . $bfcomputer # and also this fixed string . '%22%29'; # end of concatenation <?xml version="1.0" encoding="UTF-8"?> <BESAPI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNa +mespaceSchemaLocation="BESAPI.xsd"> <Query Resource="(names of it, ip addresses of it"> <Result></Result> <Error>This expression could not be parsed.</Error> </Query> </BESAPI> sh: +%2C%20root%20server%20of%20it%2C%20operating%20systems%20of%20it% +2C%20: not found sh: +last%20report%20time%20of%20it%2C%20agent%20versions%20of%20it%2C +%20va: not found sh: +lues%20of%20results%20from%20%28BES%20Property%20%22_SupportGroup +%22%: not found sh: +29%20of%20it%29%20of%20bes%20computers%20whose%20%28%20name%20of% +20it: not found sh: +%20as%20lowercase%20starts%20: not found sh: +with%20%22server01%22%29: not found
      loving perl more and more!

      in that case use some more and make it easier to see the query

      use strict; use URI::Escape; my $values = join ', ',( 'names of it', 'ip addresses of it', 'root server of it', 'operating systems of it', 'last report time of it', 'agent versions of it', 'values of results from (BES Property "_SupportGroup") of it' ); my $bfcomputer = 'ABC123'; my $who = 'name of it as lowercase starts with "'.$bfcomputer.'"'; my $relevance = "($values) of bes computers whose ( $who)"; my $bfquery = 'query?relevance='.uri_escape($relevance);
      poj

        Ahhhh Master poj,

        I am yet a young padawan and have much to learn, but seriously I am getting a whole slew of errors. I'll have to post them and the contents of my script when i get a chance.

        Thanks...

Re^2: Help with script recognizing variable in string
by TonyNY (Beadle) on Jun 20, 2018 at 20:06 UTC
    Thanks!