如何抑制关于被反对的字符被视为文字字符的警告?

时间:2013-07-11 23:52:28

标签: regex perl

在我的代码中,我使用String :: Random

中的random_regex函数创建一个类似于IP地址的字符串
  $ip = random_regex('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}');

这是在循环内部,每当它到达此行时,Perl输出:

'\.' being treated as literal '.' at ./test_data.pl line 67
'\.' being treated as literal '.' at ./test_data.pl line 67
'\.' being treated as literal '.' at ./test_data.pl line 67

如何忽略或取消此警告?或者修改正则表达式以完全避免它?

1 个答案:

答案 0 :(得分:4)

我无法理解random_regex发出此警告的原因。为非单词字符发出它是没有意义的,更不用说.

此外,它没有提供禁用它的机制,所以你需要挂钩。

my $ip = do {
   local $SIG{__WARN__} = sub {
      return if $_[0] =~ /^'\\(\W)' being treated as literal '\1'/;
      print(STDERR $_[0]);
   };

   random_regex('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
};