You're right, I am passing a numeric value to the function and encountering the error. I used the function provided by you and it's working fine.
Thanks Ankur Jain On Dec 4, 2007 8:27 PM, Rob Dixon <[EMAIL PROTECTED]> wrote: > 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/ > > > -- Regards Ankur Jain http://ankurjain.org