%vars与$ vars的Perl变量插值规则

时间:2013-08-13 21:15:38

标签: perl string-interpolation

即使它是双引号,并且%s应该插入到不存在的哈希值,这是有效的Perl并输出"confusing = true"

#!/usr/bin/perl -w
use strict;

my $what = "confusing = %s";
printf $what, "true";

但是,这是无效的(如预期的那样),因为$ s不存在:

my $what = "confusing = $s";

3 个答案:

答案 0 :(得分:5)

你说%s应该插入一个不存在的哈希”,但它不应该。没有哈希插值。但是在Perl 6中是可能的。

答案 1 :(得分:4)

此外,哈希不用双引号插值;标量(包括哈希元素)和数组是。

答案 2 :(得分:3)

您正在将格式说明符和值传递给printf,并且它的行为符合预期;这可能看起来像一个哈希插值,但事实并非如此。

有关格式说明符的详细信息,请参阅perldoc -f sprintf;简而言之,格式说明符中的%s表示应将值插值为字符串,在这种情况下效果与print "confusing = $what"相同。

如果您将printf替换为print%s将按字面意思采用,而不是作为变量插值,结果将为confusing = %s;这个,而不是对printf的召唤,就是托金顿的格言适用的情况。