Perl grep 成哈希,数组作为值



我正在构建一个具有以下路由的小型Web服务

my %routes = (
  'News' => ['^news', '^news/?(.*)?', '^news/(d+)/(edit|delete|update)'],
  'User' => ['^users', '^users/?(.*)?', '^users/(d+)/(edit|delete|update)'],
);

%routes 中的每个键都是一个模块,相应的数组包含模块支持的可能请求。

因此,如果请求是"news/3/edit",则应找到并返回新闻模块。

我想做的是 grep 正确的键,如果它对应的数组值与传入的请求匹配。

您应该使用一个使您能够创建路由的框架,从长远来看它会简单得多。不过,在回答您的一般问题时,您可以执行以下操作:

use strict;
use warnings; 
use List::Util qw(any);
my %routes = (
  'News' => ['^news', '^news/?(.*)?', '^news/(d+)/(edit|delete|update)'],
  'User' => ['^users', '^users/?(.*)?', '^users/(d+)/(edit|delete|update)'],
);
sub match { 
   my ($string_to_match) = @_;
   foreach my $module ( keys %routes ) {
      return $module if any { $string_to_match =~ m/$_/ } @{$routes{$module}}
   }
   return;
}

然后你可以这样说:

use strict; 
use warnings; 
use feature qw(say);
use MatchRoutes; # or whatever your package is called
say MatchRoutes->new->match('news/3/edit');

最新更新