首页 > 解决方案 > 为什么我不能打印文本“$!”?

问题描述

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

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

print "$!";

我收到一个错误:

没有相应的文件和目录

如何打印这两个字符$!

标签: perl

解决方案


这里有几个问题。目前还不清楚你误解了哪一个。

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

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

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

美元!

引用时,检索 C整数变量$!的当前值。errno如果$!分配了一个数值,则该值存储在errno. 当作为字符串引用时,$!产生对应于 的系统错误字符串errno

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


推荐阅读