You can do this with "eval":
my $string = 'hello\tworld\n';
my $decoded_string = eval "\"$string\"";
Note that there are security issues associated with this approach if you do not have 100% control of the input string.
Edit: if you want ONLY to interpolate \ x substitutions (and not the general case of “something that Perl will interpolate in the quoted string”), you can do this:
my $string = 'hello\tworld\n';
$string =~ s
my $decoded_string = eval "\"$string\"";
This does almost the same thing as quotemeta, but frees the '\' characters from escaping.
Edit2: this is still not 100% safe, because if the last character is "\" - it "seeps" beyond the end of the line, though ...
, 100% , , , eval:
my %sub_strings = (
'\n' => "\n",
'\t' => "\t",
'\r' => "\r",
);
$string =~ s/(\\n|\\t|\\n)/$sub_strings{$1}/gs;