[Megoldva] Perl - string összehasonlítás nem megy

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

Hozzászólások

Perl Operators: Part 2

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

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.

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

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!"..

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!"..