Вот такая работающая конструкция:
...
Но при 
str="";
в $buf=$ENV{\'QUERY_STRING\'}; 
попадает не значение x , а строка "+x+" 
Как передать значение?
(если в данном случае сформировать :
exec cgi="..." - та же проблема, exec cmd="..." - не работает...)
По-видимому внутрь  нечего переменного не запихнуть...