perl - 为什么我不能打印文本“$!”?
问题描述
在 Perl 5.26.2 中,当我运行此代码时:
use POSIX qw(setlocale);
use locale;
setlocale LANGUAGE, "en_US";
print "$!";
我收到一个错误:
没有相应的文件和目录
如何打印这两个字符$!
?
解决方案
这里有几个问题。目前还不清楚你误解了哪一个。
$!
是一个变量。如果您在 Perl 中打印双引号字符串,它将扩展字符串中包含的所有变量。如果您不想将$!
其视为变量,则可以改用单引号字符串或转义$
以删除其特殊含义。
print '$!';
print "\$!";
$!
是 Perl 的特殊内置变量之一。如果你在perldoc perlvar中查找它,你会看到:
美元!
引用时,检索 C整数变量
$!
的当前值。errno
如果$!
分配了一个数值,则该值存储在errno
. 当作为字符串引用时,$!
产生对应于 的系统错误字符串errno
。
所以,当你打印它时,你很可能会得到一个看起来像错误的东西——因为它包含你的代码生成的最后一个系统错误。在这种情况下,您可能setlocale
以某种方式失败并设置了错误变量。
推荐阅读
- java - Java - 方法调用“添加”将产生“NullPointerException”
- swift - 页面上未执行 beforeEncode 和 afterDecode
- ffmpeg - 使用ffmpeg进行屏幕录制时添加水印的命令行是什么?
- c# - OneDrive API 与 Unity 3D 的集成
- sql - 从 Postgres jsonb 数组中提取最早日期
- ruby-on-rails - Rails postgres时间属性不保存
- javascript - Firestore - 根据 Firestore 收集文档的内部数据对数据进行排序
- rust - 限制 Rust 程序中的 cpurate
- c# - 模拟 ClaimsPrincipal 类上的扩展方法以在 HttpContext.User 中使用
- sql - SQL - 加入 3 个表,但显示中间表中缺少数据的位置