say grep { REGEX } @list; #doesn't work, because it isn't really doing what you think it is doing say grep { /REGEX/ } @list; #doesn't work because of the problems mentioned above when using constants in contexts that auto-quote barewords say grep { /(?^:string)/ } @list; #this works (and throws errors if // are removed) use Readonly; Readonly::Scalar my $regex_ro => qr/string/; say grep {/$regex_ro/} @list; #this works (and, as expected, gives same bad result you got if // is removed) my $regex = qr/string/; say grep { /$regex/ } @list; #this works (and, as expected, gives same bad result you got if // is removed)