# Simple Unit (implémentation Perl)

## Utilisation

Utilisation des unités transformées :

```pl
use fundamentalUnit;

my $m = FundamentalUnit->new;
my $km = $m->scaleMultiply(1000);
my $cm = $m->scaleDivide(100);
my $cmToKm = $cm->getConverterTo($km);

$cmToKm->convert(3.0); # 0.00003
$cmToKm->inverse->convert(0.00003); # 3
```

Utilisation des unités dérivées :

```pl
use fundamentalUnit;
use derivedUnit;

my $m = FundamentalUnit->new;
my $km = $m->scaleMultiply(1000);

my $km2 = DerivedUnit->new($km->factor(2));
my $cm = $m->scaleDivide(100);
my $cm2 = DerivedUnit->new($cm->factor(2));
my $km2Tocm2 = $km2->getConverterTo($cm2);

$km2Tocm2->convert(3.); # 30000000000
$km2Tocm2->inverse()->convert(30000000000.); # 3
```

Utilisation des unités dérivées en combinant les dimensions :

```pl
use fundamentalUnit;
use derivedUnit;

my $m = FundamentalUnit->new;
my $kg = FundamentalUnit->new;
my $g = $kg->scaleDivide(1000);
my $ton = $kg->scaleMultiply(1000);
my $gPerM2 = DerivedUnit->new($g, $m->factor(-2));
my $km = $m->scaleMultiply(1000);
my $tonPerKm2 = DerivedUnit->new($ton, $km->factor(-2));
my $cm = $m->scaleDivide(100);
my $tonPerCm2 = DerivedUnit->new($ton, $cm->factor(-2));
my $gPerM2ToTonPerKm2 = $gPerM2->getConverterTo($tonPerKm2);
my $gPerM2ToTonPerCm2 = $gPerM2->getConverterTo($tonPerCm2);

$gPerM2ToTonPerKm2->convert(1.); # 1
$gPerM2ToTonPerKm2->inverse->convert(3.); # 3
$gPerM2ToTonPerCm2->convert(1.); # 1e-4
$gPerM2ToTonPerCm2->convert(3.); # 3e-10
$gPerM2ToTonPerCm2->offset; # 0.0
$gPerM2ToTonPerCm2->scale; # 1e-10
$gPerM2ToTonPerCm2->inverse->offset; # -0.0
$gPerM2ToTonPerCm2->inverse->convert(3e-10); # 3
```

Utilisation des températures (conversions affines et linéaires) :

```pl
use fundamentalUnit;

my $k = FundamentalUnit->new;
my $c = $k->shift(273.15);
my $kToC = $k->getConverterTo($c);

$kToC->convert(0); # -273.15
$kToC->inverse->convert(0); # 273.15

# en combinaison avec d'autres unites, les conversions d'unites de temperatures doivent devenir lineaires
my $m = FundamentalUnit->new;
my $cPerM = DerivedUnit->new($c, $m->factor(-1));
my $kPerM = DerivedUnit->new($k, $m->factor(-1));
my $kPerMToCPerM = $kPerM->getConverterTo($cPerM);

$kPerMToCPerM->convert(3.); # 3
$kPerMToCPerM->inverse->convert(3.); # 3
```

Utilisation des conversions non décimales :

```pl
use fundamentalUnit;
use derivedUnit;

my $m = FundamentalUnit->new;
my $km = $m->scaleMultiply(1000.);

my $s = FundamentalUnit->new;
my $min = $s->scaleMultiply(60.);
my $h = $s->scaleMultiply(3600.);

my $ms = DerivedUnit->new($m, $s->factor(-1));
my $kmh = DerivedUnit->new($km, $h->factor(-1));

my $msToKmh = $ms->getConverterTo($kmh);

$msToKmh->convert(100.); # 360
$msToKmh->inverse->convert(18.); # 5
```