use Data::Dumper; my %myhash; $myhash{REGEXP} = qr/^something$/; print Dumper \%myhash; __END__ $VAR1 = { 'REGEXP' => qr/(?-xism:^something$)/ }; #### $myhash{REGEXP} = qr/^something$/; print $myhash{REGEXP}; # --> (?-xism:^something$) $myhash{REGEXP} = qr/(?-xism:^something$)/; print $myhash{REGEXP}; # --> (?-xism:(?-xism:^something$)) $myhash{REGEXP} = qr/(?-xism:(?-xism:^something$))/; print $myhash{REGEXP}; # --> (?-xism:(?-xism:(?-xism:^something$))) ... #### --- REGEXP: !!perl/regexp (?-xism:^something$) #### package YAML::Type::regexp; ... use constant _QR_TYPES => { '' => sub { qr{$_[0]} }, x => sub { qr{$_[0]}x }, i => sub { qr{$_[0]}i }, ... msix => sub { qr{$_[0]}msix }, }; sub yaml_load { my $self = shift; my ($node, $class) = @_; return qr{$node} unless $node =~ /^\(\?([\-xism]*):(.*)\)\z/s; my ($flags, $re) = ($1, $2); $flags =~ s/-.*//; my $sub = _QR_TYPES->{$flags} || sub { qr{$_[0]} }; my $qr = &$sub($re); bless $qr, $class if length $class; return $qr; } #### REGEXP: !!perl/regexp (?i-xsm:^something$) | v qr{^something$}i