Hello!
Adott az alábbi Perl kód:
#!/usr/bin/perl
$yearmonth=`date +%Y%m`;
$num='200712';
print $num.' = '.$yearmonth;
if ( $num eq $yearmonth ) {
print ' igen!';
}
else {
print ' nem!';
}
print "\n";
$num='111';
print $num.' = '.$yearmonth;
if ( $num eq $yearmonth ) {
print ' igen!';
}
else {
print ' nem!';
}
print "\n";
Ez egy nagyobb scriptből van kiszedve, de a problémát ez is produkálja. Nevezetesen azt, hogy a két string ha egyenlő, ha nem, mindig false-ra értékelődik ki az if feltétele. Miért van ez így? Mit szúrok el?
A fenti script kimenete:
200712 = 200712
nem!
111 = 200712
nem!
Az eredeti scriptben egyébként a $num változót MySQL adatbázisból olvasom ki.
Van ötletetek, mi okozza ezt?
Petya
- 1944 megtekintés
Hozzászólások
eq helyett ==
#!/usr/bin/perl
$yearmonth=`date +%Y%m`;
$num='200712';
print $num.' = '.$yearmonth;
if ( $num == $yearmonth ) {
print ' igen!';
}
else {
print ' nem!';
}
print "\n";
$num='111';
print $num.' = '.$yearmonth;
if ( $num == $yearmonth ) {
print ' igen!';
}
else {
print ' nem!';
}
print "\n";
root@alderaan:/tmp# ./foo
200712 = 200712
igen!
111 = 200712
nem!
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Meghatározatlan tartalmú változó (itt: $num) tartalmának debug célból való kiíratására pedig használhatod a Data::Dumper modult.
- A hozzászóláshoz be kell jelentkezni
Köszönöm, működik. Én azt gondoltam, hogy pl. az '123' stringet stringként tudom kezelni, de ezek szerint számként kell. Megint tanultam valamit :)
Petya
- A hozzászóláshoz be kell jelentkezni
Szerintem csupan egy chomp($yearmonth) hianyzik. Amugy a feltetelezesed nem stimmel.
- A hozzászóláshoz be kell jelentkezni
A chomp($yearmonth) eredménye ebben az esetben "1" lesz. Összehasonlítva az "1"-et a "200712"-vel semmiképpen sem lesz egyenlőség.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Nem akkor lenne csak "1" a chomp kimenete, ha $yearmounth = chomp($yearmount);-ként adnád meg?? Mert tudtommal ha csak sima chomp ($yearmounth);-ot használsz akkor csak a sorvégi \n-t vágja le róla ( bár ahogy néztem ez mintha itt se segítene ).
Ha tévednék akkor pls FIXME..
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Üllj le és kuss legyen!"..
- A hozzászóláshoz be kell jelentkezni
Fogalmam sincs, hogy wildy mire gondolt, egy verziót kipróbáltam, de az nem működött. Talán majd leírja, hogy mire gondolt.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
egy
chomp($yearmonth);
kell a
$yearmonth = ...
resz utan. az igaz, hogy a
chomp($yearmonth) == 1
, de mi nem is a visszateresi erteket szeretnenk osszehasonlitani a
'200712'
stringgel, asszem.
- A hozzászóláshoz be kell jelentkezni
Szerintem pedig segit, ugyanis a `date` egy soremelest is berak a $yearmonth vegere (amugy enyhen tulzas meghivni backtick-kel a date-et, van ennel jobb megoldas is, perl modulok, time() es tarsai).
- A hozzászóláshoz be kell jelentkezni
Leírnád a kódot? Mert én kipróbáltam és nem jó.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
ugyanaz, ami fent van, csak a $yearmonth = ... utan kell egy chomp($yearmonth);
- A hozzászóláshoz be kell jelentkezni
Ja, megvan.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Jogos a `date` észrevétel. .Az tényleg kiamradt.. Bár a te általad emlegetett Perl-es időkezelés se lenne rosz megközelítés, mint pl ez:
sub time {
@timeData = gmtime(time);
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = gmtime();
$theGMTime = "$hour:$minute:$second";
print $theGMTime;
}
Mondjuk ezzel csak anniy bajom van, hogy tized/ezre mp-eket nem tudsz vele nézni, de a fenti célra kitűnően alkalmas lenne ez is..
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Üllj le és kuss legyen!"..
- A hozzászóláshoz be kell jelentkezni