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

Below is a string example where I;m trying to substitute ? for # and % for &.

#Result& The percent of births as healthy births has increased in recent years in response to the Healthy Births initiative.:#Approach& The prenatal, birthing, and postpartum parts of the birth process have been changed substantially. We will have a brighter day to look forward to.:#Prospect& If the same old pace of this change continues, it will be a wonderful day.

I'm just using simple substitution.

$analysis =~ tr/#/?/; $analysis =~ tr/&/%/;

I've tried this escaping these characters with no luck.

The tr suggested failed. Some of the characters may need to be escaped.

Replies are listed 'Best First'.
Re: problem changing string characters (updated)
by haukex (Chancellor) on May 24, 2019 at 17:36 UTC
    The tr suggested failed.

    Just to add context, what you said in the chatterbox was "I'm trying to substitute < for | and > for ! and ? for # and % for & in a string and am having trouble." and I suggested tr/|!#&/<>?%/.

    However, both that suggestion and the code you showed seem to work fine for me - you will need to show an SSCCE that actually reproduces the problem you're having, and show what output you were expecting, plus any error messages you might be getting. See also How do I post a question effectively?

    use warnings; use strict; my $analysis = <<'END_INPUT'; #Result& The percent of births as healthy births has increased in recent years in response to the Healthy Births initiative.:#Approach& The prenatal, birthing, and postpartum parts of the birth process have been changed substantially. We will have a brighter day to look forward to.:#Prospect& If the same old pace of this change continues, it will be a wonderful day. END_INPUT $analysis =~ tr/#/?/; $analysis =~ tr/&/%/; #$analysis =~ tr/|!#&/<>?%/; print $analysis; __END__ ?Result% The percent of births as healthy births has increased in recent years in response to the Healthy Births initiative.:?Approach% The prenatal, birthing, and postpartum parts of the birth process have been changed substantially. We will have a brighter day to look forward to.:?Prospect% If the same old pace of this change continues, it will be a wonderful day.

    Update:

    Some of the characters may need to be escaped.

    Those particular characters aren't special to tr/// (which is not a regex operation) and don't need to be escaped - see perlop.

      I believe the problem may be in a function I pass the string to. I'll get back on this. Thanks.

      The problem was me or more precisely my code. I apologize for this. Thanks.