【发布时间】:2021-03-22 03:06:09
【问题描述】:
$ perl -e 'use strict subs; print sysopen(my $temp, "./myfile.txt", O_RDONLY);'
Bareword "O_RDONLY" not allowed while "strict subs" in use at -e line 1
如果你在命令行上运行它,你会得到那个错误。我明白为什么这是一个错误,解决方案是use Fnctl,但这是必须安装在盒子上的东西。人们对 Perl 有足够多的抱怨,而我正试图给他们一个工具来(秘密地)展示 Perl 的有用性以及它(可能)有多么少的麻烦。这没有帮助。
我正在尝试编写一个 Perl 实用程序,人们可以将其用作单个文件,而无需安装外部库。为什么内置需要外部模块?我知道O_RDONLY 在不同的操作系统上可能会有所不同,但STDIN、STDERR 和STDOUT 也可能不同,但它们可以与use strict subs 一起使用。
【问题讨论】:
-
如果你想证明简单,为什么要使用
sysopen? 99% 的时间,open会以更少的麻烦做你想做的事。 -
如果您不想让别人安装东西,请随您的代码一起发布!见metacpan.org/pod/App::FatPacker。
-
我在使用散列中的老式 Perl 文件句柄(键文件名、值句柄)时遇到了问题。当我取回手柄时,它不起作用。另外,由于这是我正在编写的“尾部”命令,因此我宁愿以更大的“吞咽”方式读取文件中的添加内容,而不是一次一行。
-
@WaltHoward,文件句柄可以更多地存储在哈希中,没有问题。
print $hash{key} "string"不起作用,但print { $hash{key} } "string"会。