我有以下代码:
#!/usr/bin/perl
use Test::Simple tests => 2;
$file = "lalaletc";
$file2 = "lalal";
ok($file =~ m/^lala/);
ok($file2 =~ m/^lala$/);
输出结果如下:
1..2
ok 1
not ok 2
# Failed test at ./test.pl line 7.
# Looks like you failed 1 test of 2.
但$ file2没有更多的字符,所以我希望它能够成功测试2.为什么不呢?
答案 0 :(得分:9)
您的变量$file2
设置为lalal
。那是5个字符。你的正则表达式是/^lala$/
,这意味着:
这只有4个字符,因为缺少最后一个l
。正则表达式不匹配,测试失败。这是正确的行为。
在此处尝试:http://rubular.com/r/O0GhEIiVAZ
在最后添加缺少的l
,它将匹配。
以下是additional explanation中的一些this site:
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
lala 'lala'
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
请注意,对于这种情况,您不需要正则表达式。您也可以使用eq
operator。
答案 1 :(得分:3)
$
匹配字符串/行的结尾。由于字符串中存在未匹配的突出“l”,因此模式匹配失败。