为什么我不能打印文本“$!”?
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
可能以某种方式失败并设置了错误变量。
在 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 Cerrno
integer variable. If$!
is assigned a numerical value, that value is stored inerrno
. When referenced as a string,$!
yields the system error string corresponding toerrno
.
因此,当您打印它时,您很可能会得到看起来像错误的东西 - 因为它包含您的代码生成的最后一个系统错误。在这种情况下,您的 setlocale
可能以某种方式失败并设置了错误变量。