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$/。つまり、次のことを意味します。

  • 行頭/文字列
  • ララ
  • 行末/文字列

最後lが欠けているので、それはたったの4文字です. 正規表現が一致せず、テストは失敗します。これは正しい動作です。

ここで試してみてください: 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 に答える