On Sat, 15 Jan 2005 01:25:21 -0800 (PST), Ajey Kulkarni <[EMAIL PROTECTED]>
wrote:
> I'm trying to match a floating point in ada.
> They are normal floating points with 2 extra things.(they can or can't
> come)
>
> 1. an underscore is permitted between the digits and
> 2. An alternate numeric base may be specified surrounding the nonexponent
> part of the number with pound signs, precided by a base in decimal.
>
> Eg: 16#6.a7#e+2, 18.9,
Sounds suspiciously like homework, but that's a fun problem.
__CODE__
#!/usr/bin/perl
use strict;
use warnings;
my @numbers = (
'16#6.f7#e+2',
'18.9',
'2#01013#',
'16e+2',
);
my @valid = (0 .. 9, 'a' .. 'z');
for my $num (@numbers) {
my ($base, $n, $exp);
if ($num =~ /^(\d+)\#([^\#]*?)\#(?:e\+(\d+))?$/x) {
($base, $n) = ($1, $2);
$exp = defined $3 ? $3 : 1;
} elsif ($num =~ /^(\d[\d._]*?)(?:e\+(\d+))?$/) {
($base, $n) = (10, $1);
$exp = defined $2 ? $2 : 1;
}
next if not $n;
my $invalid = '[^._'.join('',@valid[0..($base-1)]).']';
warn "invalid base $base number [$n] detected! ($invalid)\n"
if $n =~ /$invalid/;
print "got base $base, num $n, exp $exp\n";
}
__END__
That should (more than) get you started!
HTH,
Dave
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>