Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6937[/thread]

("string" ne "string") = (true && false): StringCompare mit eq/ne...

Leser: 1


<< >> 10 Einträge, 1 Seite
BratHering
 2005-04-28 13:41
#54295 #54295
User since
2005-04-28
155 Artikel
BenutzerIn
[default_avatar]
hallo,
ich bin ein Perlianer and new to this board.

in mener freizeit versuche ich mich am programmieren von nützlichen tools für meine Gam0r-Community.
bisher hat auch alles wunderbar funktioniert, doch an meinem aktuellen Projekt scheitere ich beim vergleichen von Strings.

ich sehe den fehler falls da einer ist überhaupt nicht.
bin schon ganz verzweifelt.

also hier mein problem:
- ich habe eine liste mit string signaturen: @strSelectedMods
- die signaturen sehen z.B. so aus:
Code: (dl )
1
2
3
{"CSM by Gunslinger ### 1.3"}
{"German_Soldiers_Mod_2.2 ### "}
{"Storm over Europe ### 1.2.0.0"}

- desweiteren habe ich eine liste mit objekten, zu denen die signaturen gehören: @objModList
- diese objekte haben eine methode: getModSig

- ich möchte alle signaturen aus @strSelectedMods mit den signaturen aller Mods vergleichen.
- etwa so (innerhalb von zwei ineinander verschachtelten for-schleifen):
Code: (dl )
1
2
3
4
5
if($strSelectedMods[$i] ne $objModList[$j]->getModSig)

bzw.

if($strSelectedMods[$i] eq $objModList[$j]->getModSig)

- dabei habe ich festgestellt, dass "eq" immer das richtige zurückliefert (TRUE oder FALSE / 1 oder nix).
- aber "ne" liefert immer TRUE / 1 zurück obwohl das nicht sein dürfte???
- wenn schon "eq" nicht auf alles TRUE zurückgibt, dann müsste "ne" nur auf das übrige TRUE zurückliefern.
- überprüft habe ich das mit:
Code: (dl )
1
2
3
4
5
print ($strSelectedMods[$i] ne $objModList[$j]->getModSig);

bzw.

print ($strSelectedMods[$i] eq $objModList[$j]->getModSig);

- kann mir jemand das verhalten von "ne" erklären?


mfg
Br@tHering\n\n

<!--EDIT|BratHering|1114681341-->
Crian
 2005-04-28 13:44
#54296 #54296
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Kannst Du bitte das Problem mal soweit reduzieren, dass Du ein lauffähiges kurzes Skript hast, aber der Fehler noch auftritt? Dann können wir das besser nachvollziehen und testen.

Eigentlich darf das beschriebene Verhalten nicht auftreten.


Edit: Herzlich willkommen =)


Edit2: Verwendest Du in Deinem Skript use strict; und use warnings;? Falls nein schalte diese mal ein, vielleicht ist das Problem ganz woanders.

Zu strict siehe auch http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict\n\n

<!--EDIT|Crian|1114681617-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Taulmarill
 2005-04-28 13:55
#54297 #54297
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ne ist die abkürzung für "not equal" und das string-equivalent zu !=
Code: (dl )
1
2
print "foo" ne "foo"; # gibt nichts aus (false) da foo gleich foo ist
print "foo" ne "bar"; # gibt 1 (true) aus da foo nicht gleich bar ist
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-04-28 14:25
#54298 #54298
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Besser so ausgeben:
Code: (dl )
1
2
print +('foo' ne 'foo' ? 'ungleich' : 'gleich'), "\n";
print +('foo' eq 'foo' ? 'gleich' : 'ungleich'), "\n";
\n\n

<!--EDIT|Crian|1114683935-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2005-04-28 14:27
#54299 #54299
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
1
2
3
...>perl -e "print +('foo' ne 'foo' ? 'ungleich' : 'gleich'), ' ', ('foo' eq 'foo' ? 'gleich' :
'ungleich')"
gleich gleich
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
BratHering
 2005-04-28 14:28
#54300 #54300
User since
2005-04-28
155 Artikel
BenutzerIn
[default_avatar]
Quote
Kannst Du bitte das Problem mal soweit reduzieren, dass Du ein lauffähiges kurzes Skript hast, aber der Fehler noch auftritt? Dann können wir das besser nachvollziehen und testen.

oha ;-)
das wird wohl unmöglich sein, weil das was ich mache fast schon eine richtig umfangreiche windows application ist, bestehend aus:
- mainScript mit Tk;
- package zum auslesen der daten aus dem spiel (das spiel muss installiert sein).
- eine ProfileClasse
- eine ModClasse
...und das alles ist schön ineinander verflächtet, also ich wüsste nicht wie.

also @strSelectedMods sieht so aus (ausgabe mit dem datadumper):
Code: (dl )
1
2
3
4
5
$VAR1 = [
'{"CSM by Gunslinger ### 1.3"}',
'{"German_Soldiers_Mod_2.2 ### "}',
'{"Storm over Europe ### 1.2.0.0"}'
];


und @objModList sieht so aus (@objModList ist ein Objekt-Container):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$VAR1 = [
bless( {
'version' => '1.3',
'desc' => 'Feel the cinematic Soundtrack of a movie.\\nThe Red Army, the UK/US Army and the Wehrmacht\\nwill speak their native languages.\\nOver 200 additional modified soundeffects!',
'name' => 'CSM by Gunslinger'
}, 'showMod' ),
bless( {
'version' => '',
'desc' => 'Made by GS_Wünsche\\Thanks to \\nGS_v.Oppeln-Bronikowski,GS_Guderian\\GS_Niemack\\Rancid+Slash nwww.germansoldiers.com',
'name' => 'German_Soldiers_Mod_2.2'
}, 'showMod' ),
bless( {
'version' => '1.2.0.0',
'desc' => 'Singleplayer & Multiplayer Mod\\n\\nwww.soe.gamehunt.de\\n\\nHave fun! Copyright(c) by CTK \'Instinct\'',
'name' => 'Storm over Europe'
}, 'showMod' )
];


die methode, die die signatur des mods aus dem objekt zurückliefert sieht so aus:
Code: (dl )
1
2
3
4
5
sub getModSig
{
my $obj = shift;
return "\{\"" . $obj->{"name"} . " ### " . $obj->{"version"} . "\"\}";
}




Quote
Verwendest Du in Deinem Skript use strict; und use warnings;?

grundsätzlich verwende ich "use strict;".
"use warnings;" nutze ich zwar nciht, aber das ist doch quasi das gleiche wie wenn man den perl-interpreter mit dem parameter "perl -w" startet, was ich tuehe?

Quote
ne ist die abkürzung für "not equal" und das string-equivalent zu !=
Code: (dl )
1
2
print "foo" ne "foo"; # gibt nichts aus (false) da foo gleich foo ist
print "foo" ne "bar"; # gibt 1 (true) aus da foo nicht gleich bar ist

genau das hätt ich gerne :-D



EDIT: übrigens benutze ich ActivePerl in der aktuellsten version mit WindowsXPproSP2.
BratHering
 2005-04-28 15:25
#54301 #54301
User since
2005-04-28
155 Artikel
BenutzerIn
[default_avatar]
*argh*

ist mir das peinlich!
seit zwei tagen plage ich mich mit dem problem herum,
dabei war das ein logischer fehler innerhalb der verschachtelten for-schleifen.
bin jetzt erst darauf gekommen...

*sorry*
jan
 2005-04-28 15:30
#54302 #54302
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
gut, dass wir drüber gesprochen haben ;)
Crian
 2005-04-28 17:38
#54303 #54303
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=BratHering,28.04.2005, 12:28]das wird wohl unmöglich sein, weil das was ich mache fast schon eine richtig umfangreiche windows application ist[/quote]
Du sollst ja auch nur das Problem in einem kleineren Skript reproduzieren, nicht Dein System. schreib ein kleines Stück Code, das Du hier posten kannst, und in dem wir den Fehler reproduzieren können.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
BratHering
 2005-05-13 01:44
#54304 #54304
User since
2005-04-28
155 Artikel
BenutzerIn
[default_avatar]
so, inzwischen bin ich auch damit fertig geworden und wollte euch nicht vorenthalten womit ich euch genervt habe... *lol*

http://www-1.informatik.fh-wiesbaden.de/~mkwas0....#SHOWMC


mfg
Br@tHering\n\n

<!--EDIT|BratHering|1115936023-->
<< >> 10 Einträge, 1 Seite



View all threads created 2005-04-28 13:41.