usr*_*etc 3 linux perl shebang
我有以下受人尊敬的 perl 脚本x.pl:
#!/usr/bin/env -S perl -Mstrict -wp
s/a/b/;
Run Code Online (Sandbox Code Playgroud)
如果我用./x.pl或运行它perl x.pl,它会用
Too late for "-Mstrict" option at ./x.pl line 1.
Run Code Online (Sandbox Code Playgroud)
但为什么?我认为“太晚了……”只是-CSDAor 之类的问题-T,因为“流已经打开”。此外,shebang 行实际上不是简单地使用指定的开关调用 perl 吗?
-M和-m开关不打算在 Perl 脚本中使用。
#!/usr/bin/perl -Mstrict
# shebang.pl
print 42;
$ perl -Mdiagnostics shebang.pl
Run Code Online (Sandbox Code Playgroud)
太晚了 - 第 1 行 (#1) (X) 处的“-Mstrict”选项 #! Perl 脚本中的行(或本地等效项)包含 -M、-m 或 -C 选项。
在 -M 和 -m 的情况下,这是一个错误,因为这些选项不适用于脚本内部。请改用 use 编译指示。
-C 选项仅在命令行上指定时才有效(后面有相同的字母或数字序列)。在命令行上指定此选项,或者,如果您的系统支持它,则使您的脚本可执行并直接运行它,而不是将它传递给 perl。
来自用户代码的未捕获异常:第 1 行的“-Mstrict”选项为时已晚。