最近我遇到一个问题,在Perl程序中Tie::File证明是我能够处理的最佳答案。我现在准备开始用CGI编写程序,需要问一下:有哪些Perl模块不能在CGI中使用,尤其是Tie::File?如果存在任何复杂性,该如何解决?
CGI(通用网关接口)基本上只是一个程序,它从 STDIN 读取请求并通过 STDOUT 输出标题和 HTML。它并没有什么特别之处:如果你足够努力的话,就没有任何你无法使用的模块。
即使是图形化的模块(例如 GTK),只要你够努力,也是可以让它们工作的。但除非你是我曾经不得不为之工作的第三方供应商,否则你可能并不会想这样做。
但请记住,你的程序可能会同时运行多个副本(每个 Web 请求一次),因此如果你使用平面文件,你将不得不处理锁定问题。
确保您的数据文件可以被CGI进程读取和写入。我之所以添加这个答案是因为它引起了一个非常奇怪的错误。我有一个脚本无法从CGI运行。事实上,CGI可以很好地读取数据的内容,但Tie::File失败了(尽管如果我从命令行调用它,它就可以正常工作)。原来权限设置为-rw-rw-r--,这意味着世界上只有我的用户和群组才能写入它,但其他人可以读取。由于CGI进程没有写权限,因此在CGI中Tie::File失败了。