Ankur wrote:

I am running the following code and receiving the warning :

Use of uninitialized value in pattern match (m//) at a.pl line 15.


a.pl :
/
**************************************************************************************/
sub CommaFormatted{
        my $delimiter = ','; # replace comma if desired
        my($n,$d) = split /\./,shift,2;
        my @a = ();
        while($n =~ /\d\d\d\d/)
        {
                $n =~ s/(\d\d\d)$//;
                unshift @a,$1;
        }
        unshift @a,$n;
        $n = join $delimiter,@a;
        $n = "$n\.$d" if $d =~ /\d/;
        return $n;
}


print CommaFormatted(10000);

/
**************************************************************************************/


Please help.

Hi Ankur.

As has been explained, the line

  my($n,$d) = split /\./,shift,2;

splits the string into a maximum of two pieces at the first full-stop
character. Because there is no such character in the target string
there is no second piece, and the value of $d is undefined. The warning
is generated when you try to use it in a pattern match at line 15.

To get around this you could change the statement to

  $n = "$n.$d" if $d and $d =~ /\d/;

(there is also no need to escape the full-stop in a simple quoted
string: it is only a special character in regular expressions.)

You may prefer the the subroutine below which does this job more
concisely.

HTH,

Rob


sub CommaFormatted {

  my $delimiter = ',';

  my $n = shift;

  while (1) {
    last unless $n =~ s/^(\d+)(\d\d\d)/$1$delimiter$2/;
  }

  return $n;
}

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


Reply via email to