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