osmickove
Honza Pazdziora
adelton na informatics.muni.cz
Úterý Duben 16 14:14:20 MEST 2002
On Tue, Apr 16, 2002 at 01:46:17PM +0200, Jiri Polcar wrote:
> Uz pred poslanim dotazu do konference jsem to vyresil filtrovanim pres
> regularni vyraz:
>
> s/([^123456789])0+([123456789])/$1$2/g;
>
> Jinak nacitam data (cas) ve formatu
>
> HHH:MM:SS
>
> a prepocitavam na minuty:
>
> ( $h, $m, $s) = split( /:/, $time );
> $min = $h*60+$m+$s/60;
>
> Ve skutecnosti je vstup o neco komplikovanejsi. Kolem casu jsou nejaky
> stredniky, carky a podobne...
>
> Trvalo me docela dlouho, nez jsem odhalil naprosto zahadne chovani, kdyz
> v se v promennych $m a $s vyskytovalo neco jako "05" a podobne.
$ perl
$x = '011';
$y = '013';
print $x + $y, "\n";
__END__
24
Mate chybu nekde jinde. U hodnot v retezcich se pri prevodu na
numerickou hodnotu nuly zleva orezavaji a neberou se do uvahy. To
byste musel pouzit explicitne funkci oct.
$ perl
$x = '011';
$y = '013';
print oct($x) + oct($y), "\n";
__END__
20
Nula na zacatku cisla se bere jako znak oktalove hodnoty implicitne
_pouze_, pokud je to pri literalnim zapisu v kodu skriptu. Nikoli
v promennych.
$ perl
print 011 + 013, "\n";
__END__
20
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------
Další informace o konferenci Perl