正規表現に基づいてハッシュをフィルタリングし、正規表現が一致する場合はハッシュからキーを削除する必要があります。
これは私がこれまでに得たものですが、残念ながら何もしません。理由はわかりません。
したがって、文字列の配列から正規表現を構築しています。部分文字列も一致させる必要があるため、ハッシュsomeprefix_somestring
キーsomestring
がstring
my $hashref = {someprefix_somekey => 'somevalue', otherprefix_otherkey => 23, otherprefix_somekey => 'someothervalue'};
my @array_of_strings = ('somekey', 'strings', 'bits', 'bobs');
my $regex = join( '|', sort { length( $b ) <=> length( $a ) or $a cmp $b } @array_of_strings );
$regex = qr{($regex)};
delete $hashref->{ grep { !m/$regex/ } keys %$hashref };
その後、$hashref
次のようになると予想されます。{otherprefix_otherkey => 23}
someprefix_somekey
otherprefix_somekey
$regex
これが機能しない理由がわかりません。教えてください
Hobbs answer のおかげで、私はそれを機能させることができました。これが私が今持っているものです:
my $hashref = {someprefix_somekey => 'somevalue', otherprefix_otherkey => 23, otherprefix_somekey => 'someothervalue'};
my @array_of_strings = ('somekey', 'strings', 'bits', 'bobs');
my $regex = join( '|', sort { length( $b ) <=> length( $a ) or $a cmp $b } @array_of_strings );
$regex = qr{($regex)};
delete @{$hashref}{grep { m/$regex/ } keys %$hashref };