well I'm not too convinced about the cases >= 1e10 ... (shouldn't bugs be catched???)
use strict;
use warnings;
sub id2p_choroba {
my $id = shift or return q();
my $chunk_length = length $id > 6 ? 3 : 2;
$id = sprintf '%0' . ($chunk_length * 3) . 'd', $id;
my $chunk = ".{$chunk_length}";
my $path = join '/', $id =~ / ^ (.*) ($chunk) ($chunk) $ /xg;
return $path;
}
sub id2p_lanx {
my $id = shift or return q();
my ($chunk,$len) = (length $id > 6 )
? (3,9)
: (2,6);
my $norm = sprintf "%0${len}d", $id;
my $path = join "/",
( $norm =~ m/ ^ (-?\d+) (\d{$chunk}) (\d{$chunk}) $ /x );
# $path ||= '-00/000/001'; # this weirdness is needed if '-?' is mi
+ssing
return $path;
}
use Test::More tests => 23;
is(id2p_lanx($_), id2p_choroba($_), "id=$_")
for q(), 0, 1, 9, 10, 99,
100, 999, 1000, 9999, 10000,
99999, 100000, 999999, 1e6,
1e7-1, 1e7, 1e8-1, 1e8, 1e9,
1e10, 1e11, 1e12;
update
hmm ... well ... surprisingly now after some modifications my code looks a lot like yours! ;-)
Cheers Rolf
( addicted to the Perl Programming Language)
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.