有没有办法在perl
中做这样的事情?
$str = "A"
print "Yes" if $str in ('A','B','C','D');
答案 0 :(得分:8)
智能匹配为experimental,并将在以后的版本中更改或消失。您将在Perl 5.18+版本中收到相同的警告。以下是替代方案:
使用grep
#!/usr/bin/perl
use strict;
use warnings;
my $str = "A";
print "Yes" if grep {$_ eq 'A'} qw(A B C D);
使用任何
#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw(any);
print any { $_ eq 'A' } qw(A B C D);
使用哈希
#!/usr/bin/perl
use strict;
use warnings;
my @array = qw(A B C D);
my %hash = map { $_ => 1 } @array;
foreach my $search (qw(A)) #enter list items to be searched here
{
print exists $hash{$search};
}
另见:
答案 1 :(得分:2)
您可以将数组转换为哈希值。然后你可以有效地(在恒定时间,或 O (1))检查你的字符串是否在原始数组中。以下是有关如何查找字符串'C'
的两种不同方法:
#!/usr/bin/perl
use strict;
use warnings;
my %hash1 = map {$_ => 0} qw/A B C D/;
print 'Yes' if exists $hash1{'C'};
#!/usr/bin/perl
use strict;
use warnings;
my %hash2;
@hash2{qw/A B C D/} = ();
print 'Yes' if exists $hash2{'C'};
但当然像Perl一样,TIMTOWTDI。
答案 2 :(得分:0)
$str = "A";
@arr = ('A','B','C','D');
print "Yes" if $str ~~ @arr;