我明天参加考试,并坚持参加实验室实验。
实验:编写一个Perl程序,以跟踪访问该网页的访问者数量,并以正确的标题显示此访问者数量。
#!/usr/bin/perl
use CGI':standard';
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
print "Content-type: text/html","\n\n";
open(FILE,'<count.txt');
$count=<FILE>+1;
close(FILE);
open(FILE,'>count.txt');
print FILE "$count";
print "This page has been viewed $count times";
close(FILE);
#print $count;
我在Fedora中将count.txt
的权限更改为755。
在每个页面加载时,计数在Windows XP中的XAMPP上执行时成功递增(具有正确的shebang行)。但是我无法在Fedora上执行它。不幸的是,在我的考试中,我必须在Fedora上执行。
答案 0 :(得分:3)
始终使用use strict; use warnings;
!如果你这样做了,你会在错误日志中收到以下错误:
Global symbol "$count" requires explicit package name
修复丢失的my
后,您的错误日志中会出现以下错误:
readline() on unopened filehandle FILE
print() on unopened filehandle FILE
您可以通过检查open
返回的错误来检查您的句柄未打开的原因。
open(FILE,'<count.txt') or die "Can't open count.txt: $!\n";
open(FILE,'>count.txt') or die "Can't create count.txt: $!\n";
第一个说文件不存在。如果程序要到那么远,第二个会给你一个权限错误。那是因为您尝试访问根目录(count.txt
)中名为/
的文件。更改cwd或使用绝对路径。
顺便说一句,你有一个竞争条件。如果两个请求同时进入,您最终只会计算其中一个请求。
| process 1 process 2
| ---------------------------- ----------------------------
T Read count from the file (4)
i Add 1 to count (5)
m Read count from the file (4)
e Add 1 to count (5)
| Save new count to file (5)
v Save new count to file (5)
您需要使用锁定机制。
答案 1 :(得分:2)
shebang(#!
)必须是文件的第一个字符。