2016-06-24 9 views
-1

Ich lese eine Datei, die Tausende von Zeilen enthält. Ich lese die Datei Zeile für Zeile. Nachdem ich die Zeile mit substr gelesen habe, hole ich 2 Werte für 2 Variablen wie unten gezeigt.Gleichheitsoperator für Zahlen und Alphanummern in Perl

$val1 = substr($line,15,3); 
$val2 = substr($line,18,3); 

Jetzt möchte ich überprüfen, ob diese beiden Werte gleich sind. $val1 kann nur eine Nummer sein (wie 233) oder es kann alphanumerisch sein (wie V23), was von Zeile zu Zeile variiert. Ich bin weder in der Lage, == Operator noch Operator zu verwenden. Bitte geben Sie mir einen Vorschlag, wie Sie dieses Problem lösen können.

Um es klar zu machen, beachten Sie unten das Beispiel. Nach dem Lesen der ersten Zeile val1 = 235 und val2 = 236. Hier, wenn ich eq benutze, gibt es true zurück, SO muss ich == verwenden. Nach dem Lesen der zweiten Zeile val1 = v26 und val2 = v26. Hier kann ich nicht == verwenden, da es alphanumric ist. Ich brauche eq.

so wie man Programm dafür schreibt?

+1

Warum können Sie nicht 'eq' verwenden? – melpomene

+0

Wenn einer der Operanden zu 'eq' eine Zahl ist, wird Perl sie zu einer Zeichenkette zwingen. –

+0

Um zu klären, sollte "2.0" gleich "2" sein? (das Zeichen '2' gefolgt von zwei Leerzeichen) – ThisSuitIsBlackNot

Antwort

1

mögliche Lösung ..

use strict; 
use warnings; 
use Scalar::Util qw(looks_like_number); 

my $val1 = '233'; 
my $val2 = 'V23'; 

if (looks_like_number($val1) && looks_like_number($val2)) 
{ 
    print "both values are numbers."; 
    if ($val1 == $val2) 
    { 
     print "numeric values are equivalent."; 
    }else{ 
     print "numeric values are not equivalent."; 
    } 
} 
elsif (!looks_like_number($val1) && !looks_like_number($val2)) 
{ 
    print "both values are strings."; 
    if ($val1 eq $val2) 
    { 
     print "string values are equivalent."; 
    }else{ 
     print "string values are not equivalent."; 
    } 
} 
else 
{ 
    print "the variables are not of the same type."; 
} 
Verwandte Themen