#!/usr/bin/perl -w use strict; my $mask = shift @ARGV; my @segment = split /\./, $mask; my @re = map { my $r; if ($_ eq '@') { $r ='(\d+)' } else { $r= '\w+' } $r } @segment; my $re ='^' . join ('\.' , @re) . '$'; my $name = shift @ARGV; my ($digits) = $name =~ /$re/; print $re , $/; print $digits, $/;