我正在寻找列表中某个元素的存在。
在Python中有一个in关键字,我会做类似的事情:
if element in list: doTask Perl中是否有等效的东西,而不必手动遍历整个列表? 问题来源于stack overflow
如果您进行了一些自动加载黑客攻击,则可以在Perl中完成足够类似的语法。
创建一个小程序包来处理自动加载:
package Autoloader; use strict; use warnings;
our $AUTOLOAD;
sub AUTOLOAD { my $self = shift; my ($method) = (split(/::/, $AUTOLOAD))[-1];
die "Object does not contain method '$method'" if not ref $self->{$method} eq 'CODE';
goto &{$self->{$method}};
}
1; 然后,您的其他包或主脚本将包含一个子例程,该子例程返回受祝福的对象,当尝试调用其方法时,该对象将由Autoload处理。
sub element { my $elem = shift;
my $sub = {
in => sub {
return if not $_[0];
# you could also implement this as any of the other suggested grep/first/any solutions already posted.
my %hash; @hash{@_} = ();
return (exists $hash{$elem}) ? 1 : ();
}
};
bless($sub, 'Autoloader');
} 这使您的用法看起来像:
doTask if element('something')->in(@array); 如果您重新组织闭包及其参数,则可以用另一种方式切换语法,使它看起来像这样,这与autobox样式有点接近:
doTask if search(@array)->contains('something'); 执行此操作的功能:
sub search { my @arr = @_;
my $sub = {
contains => sub {
my $elem = shift or return;
my %hash; @hash{@arr} = ();
return (exists $hash{$elem}) ? 1 : ();
}
};
bless($sub, 'Autoloader');
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。