我想检查perl数组是否提供某个值。
How can I check if a Perl array contains a particular value?告诉我,我可以使用grep( /^$value$/, @array )
来检查$value
中是否已包含@array
。
只要$value
没有特殊字符,此功能就可以使用。不幸的是,我的数组元素是visual studio项目的路径,看起来像$(MY_USER_MACRO)/includes/myfile.h
。对于这些元素,grep( /^$value$/, @array )
总是返回false
,尽管@array
中已经存在大量此类条目}。
我认为发生此问题是因为$value
中包含$
字符,因此会以某种方式中断grep
执行。
有没有办法告诉grep
字面上取得给定的字符串?如果不是:我怎么能解决我的问题?
答案 0 :(得分:7)
引用你的正则表达式:
grep( /^\Q$value\E$/, @array )
你也可以这样做,因为你正在测试平等:
grep( $_ eq $value, @array )
答案 1 :(得分:0)
grep { index($_, $value) >= 0} @array;
perldoc -f index
指数STR,SUBSTR,POSITION
索引STR,SUBSTR
索引函数在另一个字符串中搜索一个字符串,但没有完整正则表达式模式匹配的类似通配符的行为。它
在POSITION或之后返回STR中第一次出现SUBSTR的位置。如果省略POSITION,则从头开始搜索
字符串。字符串开头之前或结束之后的POSITION分别被视为开头或结尾。位置
并且返回值基于0(或者您将$ [变量设置为 - 但不要这样做)。如果找不到子字符串," index"回报
一个小于基数,通常" -1"。
答案 2 :(得分:0)
上述方法的另一个解决方案是,如果您只关心至少一个匹配值的存在,并且您不关心它们中有多少匹配,则可以使用any
函数来自{ {1}}。
List::Util