【发布时间】:2013-08-13 21:15:38
【问题描述】:
即使它是在双引号中,并且%s 应该被插入到一个不存在的散列中,这是有效的 Perl 并输出 "confusing = true"。
#!/usr/bin/perl -w
use strict;
my $what = "confusing = %s";
printf $what, "true";
但是,这是无效的(如预期的那样),因为 $s 不存在:
my $what = "confusing = $s";
【问题讨论】:
-
谢谢 pilcrow。我将以 Nathan Torkington 的引述作为答案。 “最大的问题是 % 在 printf 的双引号字符串中大量使用。”
-
@pilcrow 不相关;请注意,这是对
printf的调用,它以特定的、定义的方式处理其格式字符串中的%s,而不是对print的调用,其中%s是有问题的并且适用于托金顿的格言。 -
@AaronMiller,OP 的真正问题涉及一个双引号字符串 (
"%s") 中的变量与另一个双引号字符串中的变量的语义("$s")。 OP 对字符串的处理——将它们用作 printf 的参数等——并不重要。 -
@pilcrow 当然是!
printf解释%s,并赋予它行为,这对于熟悉该功能的任何人来说都是完全可以预期的;print没有,并且给了它行为,不熟悉 Perl 的人可能会感到惊讶。