Perl没有C风格的预处理器级别"包括"功能。就是这样,并且有许多网站解释如何或多或少地模仿相同类型的行为。
我在这些网站上找不到的一件事就是为什么perl没有这个功能的任何解释。鉴于Perl经常提供许多不同的方法来完成同样的事情,这是一个奇怪的遗漏。
有人可以解释为什么决定排除这种功能吗?
答案 0 :(得分:7)
Perl已经有require
,do
,eval
以及其他文件。它不需要内置的预处理器,如果你需要一个很糟糕的,有过滤器。 http://perldoc.perl.org/perlfilter.html
一般来说,没有人想要#include
,即使C和C ++程序员也会乐意放弃它以换取:
#include
是遗产,期间。如果主流语言设计师明天宣布他们将#include
添加到(你最喜欢的语言),你可能会看到大规模的歇斯底里,大笑,并且对那位设计师失去信心。
语言设计师不会以任何新语言实施#include
,只有更好的方法。总的来说,趋势是试图实现单程lexing。预处理要求您逐步扩展#includes
并可能重复重新访问相同的字符。它已经解决了问题,并且是C ++编译的原因之一。在60年代和70年代,当内存和CPU很小,语言和问题更简单时,就像代码库一样。如今,你希望能够编译一个"库"一次,使用它存储其类型元数据,以便编译器可以有效地访问它而无需重新扫描它。这就是微软用预编译标题做的事情。
那么#include
会有什么用呢?
预处理器IMO唯一有用的功能是条件编译。
#ifdef _WIN32_
// do windowsy stuff
#else
#endif
同样,Perl也可以使用do
,eval
或require
执行此操作。
答案 1 :(得分:0)
Perl没有或没有它比C更多。
C预处理器的设计使得它和C需要尽可能少地了解彼此。没有理由不能将它与Perl一起使用。
那么为什么Perl程序员不这样做呢?
正如codenhein所解释的那样,使用包含机制与编译器彼此之间没有任何关系通常是一个坏主意,因为它会让你对一些既无法诊断的疯狂错误持开放态度; C程序员习惯的事实并没有改变它。