为什么我不能打印文本“$!”?

Why can I not print text "$!"?

在 Perl 5.26.2 中,当我 运行 此代码时:

use POSIX qw(setlocale);
use locale;
setlocale LANGUAGE, "en_US";

print "$!";

我收到一个错误:

No such file or directory

如何打印两个字符 $!

$! 在 Perl 中是 a predefined variable。并且用双引号构建的字符串将被插入。

您的代码打印了 setlocale 产生的错误消息。要打印文字“$!”,您可以使用单引号,例如 print '$!';.

这里有一些问题。不清楚你误会了哪一个。

$! 是一个变量。如果您在 Perl 中打印双引号字符串,它会扩展字符串中包含的所有变量。如果您不想将 $! 视为变量,则可以使用单引号字符串代替或转义 $ 以删除其特殊含义。

print '$!';
print "$!";

$! 是 Perl 的特殊内置变量之一。如果您在 perldoc perlvar 中查找它,您会看到:

$!

When referenced, $! retrieves the current value of the C errno integer variable. If $! is assigned a numerical value, that value is stored in errno. When referenced as a string, $! yields the system error string corresponding to errno.

因此,当您打印它时,您很可能会得到看起来像错误的东西 - 因为它包含您的代码生成的最后一个系统错误。在这种情况下,您的 setlocale 可能以某种方式失败并设置了错误变量。