PERL, problem s hodnotou promenne
d.petr
d.petr na post.cz
Pátek Říjen 9 19:26:23 CEST 2015
---------- Původní zpráva ----------
Od: d.petr <d.petr na post.cz>
Komu: Diskuse o Linuxu v cestine <linux na linux.cz>
Datum: 9. 10. 2015 12:04:22
Předmět: PERL, problem s hodnotou promenne
"Dobrý den,
řeším tady takový pro mě nepochopitelný problém v PERLu. Mám takovýhle
kousek programu v konstrukci given-when
when ($_ < (nejaky_vyraz)) {
$Nova = $Sdilene{CO} - 0.2 * $Sdilene{PV};
if ($Sdilene{SL} > $Nova) {
$Sdilene{SL} = $Nova;
$Stav = 2;}}
a pokud program touto částí projde, vrátí se mi vždy $Sdilene{SL}==1 (má
hodnotu 1). Přitom $Nova má hodnotu větší, než 1.
Zajímavé je, že když jsem si dovnitř bloku when zařadil různé průběžné
výpisy proměnných, abych sledoval, kde se to pokazí, všechny proměnné
nabývaly hodnot správných, dokonce i ta $Sdilene{SL}.
Teď jsem zjistil, že stačí změnit řádek uvnitř podmínky na
$Sdilene{SL} = 1 * $Nova;
a už je taky výsledek v $Sdilene{SL} správný. Zkrátka když jakkoliv
použiju proměnnou $Nova před přiřazením její hodnoty do $Sdilene{SL},
vykoná se to celé dobře. Když přiřadím hned, vloží se 1. Přitom všechny
použité proměnné jsou číselné.
Máte pro toto chování někdo vysvětlení? PERL 5.14.2.
"
Tak jsem se posunul trošku dál. Teď mám už za blokem given-when (takže ten
už za to nemůže) proměnnou $Sdilene{SL} se správnou hodnotou, ale uloženou
jako řetězec, tedy aspoň tak ji zobrazuje dumper. Je zvláštní, že
print "$Sdilene{SL} \n";
vypíše 1 (jedničku). Když ale před printem přiřadím
$Sdilene{SL} = $Sdilene{SL} * 1;
už print vypíše správnou hodnotu.
Fakt zvláštní.
Ani nečekám, že by ještě někoho něco napadlo, píšu to spíš už jen jako
zajímavost.
Petr
Další informace o konferenci Linux