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.

但是 $file2 没有更多字符了,所以我希望它能够成功测试 2。为什么没有呢?

4

2 回答 2

9

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

  • 行/字符串的开头
  • 啦啦
  • 行尾/字符串

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

在这里尝试: http ://rubular.com/r/O0GhEIiVAZ 在末尾 添加缺少l的内容,它将匹配。

以下是从该站点获取的一些附加说明

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

请注意,对于这种情况,您不需要正则表达式。您也可以使用eq运算符

于 2013-05-14T14:14:13.387 回答
3

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

于 2013-05-14T14:14:10.620 回答