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

I am getting this unusual error.

I need to substitute the word with the corresponding number

my code is as follows

for($i = 0,my $k = 1; $i<= $#name; ++$i,++$k){ $phylo =~ s/($name[$i])/$k/} print("$phylo \n");
And my output is

9 -2393.2 ((((CH7,2),3),(4,(5,(6,7)))),((8,10),9),11);

The  $name[0] is not being substituted by 1

i tried doing it explicitly and it does not work

suggestions are welcome

Replies are listed 'Best First'.
Re: Word matching in string
by Joost (Canon) on Mar 25, 2005 at 01:23 UTC
      I am sorry about that

      @name consists of
      CH7 1CP5 1LHT 1SPG 1FAW 1HBR 1WMU 1F5P 1UC3 3LHB 1IT2
      the input $phylo consists of
      9 -2393.2 (((CH7,1CP5),1LHT),1SPG,1FAW,1HBR,1WMU)))),((1F5P,3LHB),1UC3),1IT2);

      on running the code, i get
      9 -2393.2 ((((CH7,2),3),(4,(5,(6,7)))),((8,10),9),11);
      and it supposed to be
      9 -2393.2 ((((1,2),3),(4,(5,(6,7)))),((8,10),9),11);

      to my knowledge my code is correct and i am not able to figure out the error

      the code is

      for($i = 0,my $k = 1; $i<= $#name; ++$i,++$k){ $phylo =~ s/($name[$i])/$k/;} print("$phylo\n");

        Jaya, for me it is working perfectly.

        @name = qw (CH7 1CP5 1LHT 1SPG 1FAW 1HBR 1WMU 1F5P 1UC3 3LHB 1IT2); $phylo = "9 -2393.2 (((CH7,1CP5),1LHT),1SPG,1FAW,1HBR,1WMU)))),((1F5P, +3LHB),1UC3),1IT2)"; for($i = 0,my $k = 1; $i<= $#name; ++$i,++$k){ print "$name[$i]\t$i\t$k\n"; $phylo =~ s/($name[$i])/$k/; } print("$phylo\n");

        output:

        CH7 0 1 1CP5 1 2 1LHT 2 3 1SPG 3 4 1FAW 4 5 1HBR 5 6 1WMU 6 7 1F5P 7 8 1UC3 8 9 3LHB 9 10 1IT2 10 11 9 -2393.2 (((1,2),3),4,5,6,7)))),((8,10),9),11)

        Prasad

Re: Word matching in string
by nobull (Friar) on Mar 25, 2005 at 09:20 UTC
    The conventional solution is
    my %subst; @subst{@name} = ( 1 .. @name ); $phylo =~ s/(\w+)/$subst{$1}||$1/eg;

    The || will break down if one of your replacement strings is '0'. Fortunately in this case it is not.

Re: Word matching in string
by prasadbabu (Prior) on Mar 25, 2005 at 01:30 UTC
    Jaya, i think in $phylo, $name[0] might have not matched, so there is no substitution.

    If you provide the value of $phylo, we can look into that, the input you provided is not enough.

    Prasad