PERL:我的正则表达中缺少什么?

-3 regex perl cgi

这是学校项目的一部分.我无法弄清楚我的正则表达式中的问题是什么.我有更多的工作,但这些给我带来了困难.Apache没有告诉你出错的确切位置.

First和Last名称必须是两个简单名称,并以Lastname,Firstname格式输出

my $name = param('name');

if($name =~ {2}) {
    print "Name will be stored as $2, $1<br/><br/>";
} else {
    print "Bad name. Enter just two names, your first and last<br/><br/>";
}
Run Code Online (Sandbox Code Playgroud)

密码必须按照正则表达式的顺序排列.从单个大写字母,2个数字,单个空格,2-3个小写字母,一个特殊字符(不是字母或数字)开始.

my $password = param('password');

if ($password =~ /[A-Z]+\d{2}+\s+[a-z]{2,3}+-]\^$/) {
print "Password $password was accepted<br/><br/>";
} else {
print "Bad password, $password was not accepted<br/><br/>";
}
Run Code Online (Sandbox Code Playgroud)

Sch*_*ern 6

Apache没有告诉你出错的确切位置.

首先,找到您的Apache错误日志.它将包含实际错误.我不能告诉你它在哪里,但我会开始/var/log.

其次,通过Web服务器调试代码会让事情变得更加困难.您可能正在使用CGI.pm,它可以接受命令行上的参数进行调试.

perl /path/to/your/program name='Michael Schwern'
Run Code Online (Sandbox Code Playgroud)

第二,打开严格和警告.他们会指出像这样的错别字和愚蠢的错误......

$ perl -w ~/tmp/test.plx name=foo
Odd number of elements in anonymous hash at /Users/schwern/tmp/test.plx line 5.
Bad name. Enter just two names, your first and last<br/><br/>
Run Code Online (Sandbox Code Playgroud)

就是这样.

$name =~ {2}
Run Code Online (Sandbox Code Playgroud)

这表示使用键2和未定义的值创建匿名哈希.然后将其字符串HASH(0x7fca01805668)化为类似的东西,然后将其用作正则表达式.换句话说:废话.

你正在寻找的是这样的东西,它寻找由一些空格分隔的两个单词.

$name =~ m{^(\w+)\s+(\w+)$};
Run Code Online (Sandbox Code Playgroud)

阅读Perl正则表达式教程以获取更多信息.