2013-05-14 91 views
1

我有以下代码:

#!/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. 

但是$文件2有没有更多的字符,所以我希望它取得成功测试2.为什么没有?

+4

我不认为这是一个坏问题。它不会冒风险。偶尔每个人都会犯这些错误。毕竟,我们都太盲目,看不到丢失的信件或semikolon。 – simbabque 2013-05-14 14:21:20

+1

这个问题显示了破碎的代码;它告诉我们什么是尝试;它显示错误信息;它的写法很清楚;它有我们曾经在一个很好的问题中要求的一切。 OP可能对RE的理解有限,但这就是他在这里寻求帮助的原因。这是一个很好的问题。 +1 – Flimzy 2013-11-15 01:30:22

回答

9

您的变量$file2设置为lalal。这是5个字符。你的正则表达式是/^lala$/,这意味着:行/串

  • 开始
  • 拉拉
  • 线/串

这只是4个字符,因为最后l缺少结束。正则表达式不匹配,测试失败。这是正确的行为。

试试看:http://rubular.com/r/O0GhEIiVAZ 在最后加上缺少的l,它会匹配。

下面是一些additional explanationthis site采取:

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
^      the beginning of the string 
-------------------------------------------------------------------------------- 
    lala      'lala' 
-------------------------------------------------------------------------------- 
    $      before an optional \n, and the end of the 
          string 

注意,对于这种情况下,你并不需要一个正则表达式。您也可以使用eq operator

3

$在这种情况下匹配字符串/行的结尾。由于您的字符串中存在未匹配的优秀“l”,因此模式匹配失败。