0

即使它在双引号中,并且%s应该被插入到一个不存在的散列中,这也是有效的 Perl 和输出"confusing = true"

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

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

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

my $what = "confusing = $s";
4

3 回答 3

6

你说%s应该被插值到一个不存在的散列”,但它不应该。没有散​​列插值。不过在 Perl 6 中是可能的。

于 2013-08-13T21:31:49.847 回答
4

此外,哈希不会插入双引号中;标量(包括散列元素)和数组是。

于 2013-08-13T21:27:21.673 回答
3

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

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

如果替换printfprint%s将按字面意思进行,而不是作为变量插值,结果将是confusing = %s; printf这是托金顿格言适用的情况,而不是对 的调用。

于 2013-08-13T21:27:07.347 回答