有没有办法检查 VCS 中嵌套文件的语法是否正确,让他们知道谁是 parent?就像在 Perl 中用 require 或 eval 调用一样?

Is there a way to check correct syntax in nested files in VCS, let them know who is parent? Like in Perl called with require, or with eval?

我开始使用 Visual Studio 代码,语法更正警告非常棒。我曾经在 Vim.

Linux shell 下工作了 20 年

但现在我可以看到太多与全局变量相关的错误,例如 Global symbol "%contents" requires explicit package name。非常令人不安。

可能更多 Visual Studio 代码相关,就像一些扩展插件可以做到的。

或者可以通过一些Perl函数来处理,所以它也可以解决经典的“perl -c”shell检查。

我的情况:

我有 Perl FCGI 脚本 fcgi.cgi,它在启动时 require functions.pl,然后使用全局散列变量将所有页面从文件加载到内存,这是每页分为“html”和“pl”文件(1762 个文件,大小 16MB),并在大约 20 个线程中运行。

在任何 Apache 调用中,它只调用一个线程,并从内存中对选定的“pl”页面运行“eval”,填充选定的“html”,然后超快地生成页面,就像在 0 中一样, 1秒。文件“functions.pl”只有“子”函数,它们可用于所有“pl”脚本。

Files:
|/fcgi-bin/fcgi.cgi
|/pages/page1.pl
|/pages/page1.html
|/pages/page2.pl
|/pages/page2.html
|/functions/functions.pl

那么有什么方法可以将一些信息添加到 header 到“/pages/page1.pl”和“/functions/functions.pl”,即“/fcgi-bin/fcgi.cgi " 是 parent 脚本吗?所以它会检查一个文件中的语法。

对于“/pages/page1.pl”,“/fcgi-bin/fcgi.cgi”是parent,而“/functions/functions.pl”是库。

我可以想象,仅仅为了语法检查,我可以复制那些文件的内容,在检查文件的开头,语法检查将起作用。

或者我可以简单地添加一些扩展名,例如:

#!/usr/bin/perl

#this is /pages/page1.pl

###extenstion call add for check: "/fcgi-bin/fcgi.cgi"###
###extenstion call add for check: "/functions/functions.pl"###

#normal code, using variables from /fcgi-bin/fcgi.cgi and functions from /functions/functions.pl 

所以我希望它是可以理解的。它与特定代码无关,它是一个常见问题,也可以在其他编程语言中出现。所以没有示例代码。我希望有一些 Visual Studio 特定的代码解决方案。我认为,Perl 解决方案只能通过将我 20 年的工作重新编程为某种“使用 Lib 包”定义来完成,而那是不可能的。

听起来您不喜欢新环境向您显示您之前忽略(或看不到)的警告。如果您不想修复这些问题,您可能不想要向您显示这些问题的工具。

停止使用全局变量,这是一个很好的设计决定。而且,如果您必须使用它们,请使用 use varsour 声明它们,或者使用 fully-qualified 名称。

但是,您的问题似乎是您必须在很多棘手的地方执行此操作。 (但是,您有 Perl 和源代码管理!)

我可能会建议您弄清楚如何关闭 VSCode 对 perl 的调用中的警告,就像使用 -X 开关一样,但这并不是很有帮助如果你想要语法检查。 local $^W=0 可能在某些地方有所帮助。