忽略字符串与数组比较中的空格

时间:2013-12-31 06:28:18

标签: perl

我的数组将具有以下值

array values will be like 

    "hi hello",
    "what are",
    "do you",
    "see here"

如何查找数组的值为"hihello"

我使用以下内容来检查这一点。

if ( trim($value) ~~ @array)

因为数组有空间而值没有,所以它不给出真实。有没有循环的简单方法?

3 个答案:

答案 0 :(得分:5)

您指的是哪个trim?智能匹配~~ operator5.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会grepmap以及foreach。在内部我相信这些都是循环。

阅读PC上的一些perl turorial和文档可能很有用。如果它不在您的PC上,请尝试http://perldoc.perl.org/