这是学校项目的一部分。我无法弄清楚我的正则表达式中的问题是什么。我有更多的工作,但这些给我带来了困难。 Apache没有告诉你出错的确切位置。
名字和姓氏必须是两个简单名称,并以姓氏,名字格式输出
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/>";
}
密码必须按照正则表达式的顺序排列。从单个大写字母,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/>";
}
答案 0 :(得分:6)
Apache并没有告诉你出错的确切位置。
首先,找到您的Apache错误日志。它将包含实际错误。我不能告诉你它在哪里,但我从/var/log
开始。
其次,通过Web服务器调试代码会让事情变得更加困难。您可能正在使用CGI.pm,它可以接受命令行上的参数进行调试。
perl /path/to/your/program name='Michael Schwern'
第二,turn on strict and warnings。他们会指出像这样的错别字错误......
$ 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/>
这就是这个。
$name =~ {2}
这表示使用键2和未定义的值创建匿名哈希。然后将其字符串化为类似HASH(0x7fca01805668)
的内容,然后将其用作正则表达式。换句话说:废话。
你正在寻找的是这样的东西,它寻找由一些空格分隔的两个单词。
$name =~ m{^(\w+)\s+(\w+)$};
阅读Perl regex tutorial了解详情。
答案 1 :(得分:2)
很难说你想做什么,让其他人为你做功课不会教你一件事
$name =~ {2}
根本不是正则表达式:您正在构建匿名哈希{ 2 => undef }
并使用其字符串化引用作为模式。这将是HASH(0x71c328)
,因此无法正常工作
这个是不可理解的
$password =~ /[A-Z]+\d{2}+\s+[a-z]{2,3}+-]\^$/
它会匹配A99 aaa-]^
之类的东西,但我怀疑这是否是你想要的。 +
之后的加号{2,3}
是什么?