在Perl中转换为子例程
我有一段代码,在本例中使用给定列表提取名称: 我想把这段代码转换成一个子程序,我尝试了不同的方法,但它不能满足我的需要。另一个问题是,如何将所有结果(在本例中为Barney Bruse,Wilma Flinstone)添加到@match数组中,而不使用在Perl中转换为子例程,perl,subroutine,Perl,Subroutine,我有一段代码,在本例中使用给定列表提取名称: 我想把这段代码转换成一个子程序,我尝试了不同的方法,但它不能满足我的需要。另一个问题是,如何将所有结果(在本例中为Barney Bruse,Wilma Flinstone)添加到@match数组中,而不使用foreach(@match){push(@extract,$) 注: 此代码包括一个sub(根据要求) 这种方法要快得多 这种方法解决了重复的问题。(例如,它不会像代码那样将William Bates添加到@matches中两次。) 这种方法是
foreach(@match){push(@extract,$)
注:
- 此代码包括一个sub(根据要求)
- 这种方法要快得多
- 这种方法解决了重复的问题。(例如,它不会像代码那样将
添加到William Bates
中两次。)@matches
- 这种方法是稳定的。(输出与输入的顺序相同。)
- 这段代码使用了更合理的变量名
如何在不使用foreach(@match){push(@extract,$)的情况下将所有结果添加到@match数组中 相当于
push @extract, @match;
注:
- 此代码包括一个sub(根据要求)
- 这种方法要快得多
- 这种方法解决了重复的问题。(例如,它不会像代码那样将
添加到William Bates
中两次。)@matches
- 这种方法是稳定的。(输出与输入的顺序相同。)
- 这段代码使用了更合理的变量名
如何在不使用foreach(@match){push(@extract,$)的情况下将所有结果添加到@match数组中 相当于
push @extract, @match;
注:
- 此代码将代码移动到子代码中(根据请求)
- 这种方法解决了重复的问题。(例如,它不会像代码那样将
添加到William Bates
中两次。)@matches
- 这种方法是稳定的。(输出与输入的顺序相同。)
- 此代码将代码移动到子代码中(根据请求)
- 这种方法解决了重复的问题。(例如,它不会像代码那样将
添加到William Bates
中两次。)@matches
- 这种方法是稳定的。(输出与输入的顺序相同。)
grep
'd数据推入extract
。您也可以使用push@extract、@match;
。看起来您是在做一个学习Perl的练习。这是一个很好的资源。:)但不要在shebang上使用-w
。使用使用警告
pragma。对于子程序部分对于您的问题,您需要告诉我们哪些数据是词汇数据(因此仅在中可用)子例程和始终相同,哪些数据作为参数输入,以及子例程内外是否有任何可用的内容。有一百万种方法可以做到这一点,但我们不知道您想做什么。您可以使用将grep
'd数据推送到extract
。您可以简单地使用push@extract,@match、
也一样,显式的@match
是多余的:push@extract,grep/$unit/,@array1;
在一行中完成所需的操作。这里不需要chomp
,您可以使用foreach my$unit(@list){push@extract,grep/$unit/,@arrary1;}从@list
中命名值
。你能给我们展示一个失败的子程序尝试,让我们看看哪个部分比较难吗?你可以用它将grep
'd数据推送到extract
。你也可以简单地使用push@extract,@match;
。看起来你在做一个学习Perl的练习。这是一个很好的资源。:)不要在shebang上使用-w
尽管如此。请使用使用警告
杂注。对于问题的子例程部分,您需要告诉我们哪些数据是词法数据(因此仅在子例程和始终相同,哪些数据作为参数输入,以及子例程内外是否有任何可用的内容。有一百万种方法可以做到这一点,但我们不知道您想做什么。您可以使用将grep
'd数据推送到extract
。您可以简单地使用push@extract,@match、
也一样,显式的@match
是多余的:push@extract,grep/$unit/,@array1;
在一行中完成所需的操作。这里不需要chomp
,您可以使用foreach my$unit(@list){push@extract,grep/$unit/,@arrary1;}从@list
中命名值
。您能否向我们展示一个失败的子程序尝试,以便我们了解哪个部分比较困难?
foreach (@match) { push (@extract, $_); }
push @extract, @match;
use strict;
use warnings;
sub multi_grep {
my $checks = shift;
my %seen;
for my $check (@$checks) {
++$seen{$_} for grep $check, @_;
}
# This ensures we don't remove duplicates.
# It also happens to make this approach stable.
return grep $seen{$_}, @_;
}
my @array1 = ( "Fred Flinstone", "Wilma Flinstone", "Barney Rubble", "Betty Rubble" );
my @list = ( "Ba", "Wil" ); # Expected to be regex patterns.
my @matches = multi_grep(\@list, @array1);