我的数组将具有以下值
array values will be like
"hi hello",
"what are",
"do you",
"see here"
如何查找数组的值为"hihello"
。
我使用以下内容来检查这一点。
if ( trim($value) ~~ @array)
因为数组有空间而值没有,所以它不给出真实。有没有循环的简单方法?
答案 0 :(得分:5)
您指的是哪个trim
?智能匹配~~ operator从5.18
开始是实验性的。
use List::Util qw(first);
my @array = (
"hi hello",
"what are",
"do you",
"see here"
);
# similar to grep(), first() also aliases $_ to array elements so changes
# to $_ directly affect array elements
# print "found it\n" if first { tr| ||d; $_ eq "hihello" } @array;
#
# non destructive translation, but it requires perl 5.12
# print "found it\n" if first { tr| ||dr eq "hihello" } @array;
print "found it\n" if first {
(my $s = $_) =~ tr| ||d;
$s eq "hihello";
} @array;
答案 1 :(得分:2)
也许这会有所帮助:
use strict;
use warnings;
use v5.12;
my @array = ( "hi hello", "what are", "do you", "see here" );
my $value = "hihello";
print qq/"$value" /,
( grep s/\s+//gr eq $value, @array ) ? 'found' : 'not found';
输出:
"hihello" found
替换中的/r
修饰符(Per v5.12 +)返回修改后的字符串。但是,此解决方案不会在查找时终止遍历整个列表,因为mpapec使用List::Util qw(first)
的解决方案。
答案 2 :(得分:0)
它不起作用,因为trim
只删除文本之前或之后的空格,而不是中间的空格。
如果您不喜欢for
循环,Perl会grep
和map
以及foreach
。在内部我相信这些都是循环。
阅读PC上的一些perl turorial和文档可能很有用。如果它不在您的PC上,请尝试http://perldoc.perl.org/