{ my %special = ( 'id' => "\\d+", '' => "\\*", ); sub mask2regex { my( $mask ) = @_; my @rx = split /\*(\w*)\*/, $mask; # edit: negative look behind entfernt my $rx; $rx .= $_ % 2 == 0 ? "\Q$rx[$_]\E" : $special{$rx[$_]} for 0 .. $#rx; return qr/$rx/; } # mask2regex } my $mask = '*id*-**sp.dat'; my $regex = mask2regex($mask); # qr/(?-xism:\d+\-\*sp\.dat)/