开发者社区> 问答> 正文

Perl:if(list中的元素)

我正在寻找列表中某个元素的存在。

在Python中有一个in关键字,我会做类似的事情:

if element in list: doTask Perl中是否有等效的东西,而不必手动遍历整个列表? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 21:59:45 325 0
1 条回答
写回答
取消 提交回答
  • 如果您进行了一些自动加载黑客攻击,则可以在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');
    

    }

    2020-02-08 21:59:58
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载