Peter Daum am Freitag, 3. November 2006 20:26:

Hoi Peter,

> I am looking for an way to interpolate backslash-sequences
> within a string with the usual perl semantics, e.g.
> $s='1\t\2\t3\na\ b c' should become:
> '1<tab>2<tab>3
> a b c'

With usual perl semantics, the result is different :-)

> Things I tried were for example
>  $s= eval('' . "$val"); # (hoping to trigger the normal interpolation) or
> $s=~ s/\\(.)/"\\$1"/eg;
> but somehow i couldn't get it right ...
>
> Can anybody think of an elegant solution?

I think there are more elegant solutions, but in the following you have full 
control over what translates to what:

#!/usr/bin/perl

use strict;
use warnings;

my %trans=(
  '\t'=>"\t",
  '\n'=>"\n",
  '\ '=>' ',
  '\2'=>'2',
  q(\\)=>qw( \ ), # ;-)
);

my $s='1\t\2\t3\na\ b c \\\ '; # last space: ;-)

$s=~s; (\\.) ; $trans{$1} || $1 ;gex;

print "<$s>\n";

# Note "the usual perl semantics":
print "<\2><\ >\n";

__END__

Dani

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to