osmickove
Jiri Polcar
polcar na physics.muni.cz
Úterý Duben 16 14:25:59 MEST 2002
Vida! Tim se leccos vysvetluje. Uz jsem se totiz jednou s podobnym
problemem potkal, tehdy to ovsem bylo v kodu, resp v argumenty fce eval.
Protoze jsem si onen problem dobre pamatoval, snazil jsem se mu ted
(zbytecne) vyhnout. Diky za vysvetleni. Snad si budu pamatovat i toto
:-)
--
JP
On Tue, Apr 16, 2002 at 02:15:27PM +0200, Honza Pazdziora wrote:
> 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