Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在perl中如何替换双引号中的字符串变量值_String_Perl - Fatal编程技术网

String 在perl中如何替换双引号中的字符串变量值

String 在perl中如何替换双引号中的字符串变量值,string,perl,String,Perl,我需要插入双引号中的字符串变量值。我正在使用以下代码:- $username="abc"; $password="123"; my $post_data = '{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"$username","password":"$password"} }}'; print $post_data; 它显示如下输出:- { "auth": {"tenantName":"admin",

我需要插入双引号中的字符串变量值。我正在使用以下代码:-

$username="abc";
$password="123";
my $post_data = '{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"$username","password":"$password"} }}';
print $post_data;
它显示如下输出:-

{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"$username","password":"$password"} }}
{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"abc","password":"123}"}}
但我希望输出如下:-

{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"$username","password":"$password"} }}
{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"abc","password":"123}"}}
只需使用
qq
显式设置封闭字符串文字的插值行为,如下所示:

my $post_data = qq'{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"$username","password":"$password"} }}';
。请注意,在这里使用单引号作为分隔符实际上不是一个好的选择,因为任何新开发人员都可能会对此感到困惑(希望字符串不会被插入)。但是,如文档所示,您可以将其替换为任何非空白字符(只要它不在字符串中,或者您可以轻松地将其转义)。例如:

my $post_data = qq~{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"$username","password":"$password"} }}~;
尽管如此,最清晰的方法还是将整个结构编写为HoH文本,然后将其编码为JSON。它看起来类似于:

use JSON;
my $username = 'abc';
my $password = '123';
my $post_data = {
  auth => {
    tenantName => 'admin',
    passwordCredentials => {
      username => $username,
      password => $password
    }
  }
};
print to_json($post_data);
现在,代码的目标非常明确。)

最简单的方法:

my $post_data = sprintf '{ "auth": {"tenantName":"admin", "passwordCredentials": {"username":"%s","password":"%s"} }}', $username, $password;

但我建议您使用JSON模块,并使用它创建JSON,即“现在代码的目标非常明确”,即使密码包含
qq
不设置插值行为-它设置字符串delimiter@Borodin对于
qq
,它是“双引号内插字符串”。对于
q
,它是“单引号内插字符串”。选择的运算符会影响编译器是否尝试内插,是吗?@raina77ow:只是以双引号
”设置插值行为的相同方式“@raina77ow:很公平。然后我道歉:我误解了你的意思。顺便说一句,@ikegami的评论指出了使用
来_json
的另一个优势。他并没有指出错误。+1