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