一个简单的Ruby程序,运行良好(使用Ruby 2.0.0):
#!/usr/bin/ruby
while gets
print if /foo/../bar/
end
但是,Ruby还会输出警告警告:条件中的正则表达式文字。看来Ruby认为我的触发器表达式/foo/../bar/是危险的。
我的问题:这个计划的危险在哪里?并且:我可以关闭此警告(理想情况下仅针对此声明,保持其他警告处于活动状态)?
顺便说一下,我在网上发现了几种关于这种代码的讨论,也提到了警告,但从来没有找到一个很好的解释为什么我们会收到警告。答案 0 :(得分:5)
您可以使用明确匹配来避免警告:
while gets
print if ~/foo/..~/bar/
end
Regexp#~
与$_
匹配。
我不知道为什么显示警告(说实话,我甚至不知道Ruby隐式地将regexp文字与$_
匹配),但是根据{ {3}},除非在调用Ruby时提供-e
选项,否则会显示它,即将脚本作为参数传递:
$ ruby -e "while gets; print if /foo/../bar/ end"
我会避免使用$_
作为隐式参数,而是使用类似:
while line = gets
print line if line=~/foo/..line=~/bar/
end
答案 1 :(得分:0)
我认为Neil Slater是对的:它看起来像是解析器中的一个错误。如果我将代码更改为
#!/usr/bin/ruby
while gets
print if $_=~/foo/..$_=~/bar/
end
警告消失。
我会提交错误报告。