newperldeveloper has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to replace the underscore with backslash underscore. However it is adding an extra backslash to the string.
my $file="Bob_Smith"; $file =~ s/_/\\_/g;
Bob_Smith becomes Bob\\_Smith.

Replies are listed 'Best First'.
Re: Extra backlash getting added to string
by Fletch (Chancellor) on Jul 15, 2021 at 17:14 UTC

    Erm, no.

    $ perl -E 'my $file="Bob_Smith"; $file =~ s/_/\\_/g; say $file' Bob\_Smith

    You're doing something wrong; this isn't the actual code you're using, or you're not showing us something (for instance if you're using Data::Dumper to print things out it's going to show you the string as you'd give to perl which of course would need the backslash doubled inside a "" string).

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

      I was using data dumper. thanks everyone.
Re: Extra backlash getting added to string
by AnomalousMonk (Bishop) on Jul 15, 2021 at 17:13 UTC

    That's not what I see:

    Win8 Strawberry (32) Thu 07/15/2021 13:10:20 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings my $file="Billy_Bob_Smith"; $file =~ s/_/\\_/g; print "'$file' \n"; use Data::Dumper; print Dumper $file; ^Z 'Billy\_Bob\_Smith' $VAR1 = 'Billy\\_Bob\\_Smith';
    How are you looking at $file?

    Update: Further to Fletch's post:
    Utilities like Data::Dumper and Data::Dump try to represent output as "proper" single- or double-quoted strings. A single-quoted string (as in the Data::Dumper example above) handles multiple backslashes that are not before a quote terminal like this:

    Win8 Strawberry (32) Thu 07/15/2021 13:10:29 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings my $string = 'a\b\\c\\\d\\\\e'; print ">$string< \n"; ^Z >a\b\c\\d\\e<
    You may be seeing an artifact of your data dumper utility, whatever it is.

    Give a man a fish:  <%-{-{-{-<