suhailck:
That may not be (see "Update") what OP sought: "for each special character in..." a string of special chars (only) .
Emphasis supplied.
Update Oops. Apologies to suhailck!
I missed the fact that the title explicitly allows for a "mixture" (and relied on OP's narrative and example). Hence, suhailck's reply is arguably better than the next, since the second, among other things, will convert #$%^ to #0\^ and escape the spaces, if a string of "words" is inserted in the $var
my $var="!@#$%^&(),.Now is the time}{[]+-";
print "\n$var";
my $var_with_slash=quotemeta($var);
print"\n$var_with_slash";
outputs:
!@#0^&(),.Now is the time}{[]+-
\!\@\#0\^\&\(\)\,\.Now\ is\ the\ time\}\{\[\]\+\-
|