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