package Regexp::Q; use overload; sub import { shift; die "No argument to ${\__PACKAGE__}allowed" if @_; overload::constant 'qr' => \&convert; } sub invalid { die "/$_[0]/: invalid escape '\\$_[1]'"} use vars::i '%rules' => ( '\\' => '\\', 'pQ' => qr/['"`]/, 'PQ' => qr/[^'"`]/, ); sub convert { my $re = shift; warn "rei is $re"; $re =~ s' \\ ( \\ | [pP]Q ) ' $rules{$1} or invalid($re,$1) 'sgex; return $re; } package main; unless(caller){ BEGIN{import Regexp::Q} print "YAY!$/" if q~PodMaster asked me "Do you like parachute pants?"~ =~ /\pQ/; }