Warum gibt Smartmatch True zurück, wenn Array-Slices verglichen werden, die unterschiedlich sein sollten?

8

Das folgende Skript passt auf Slices von zwei Arrays. Zu Beginn sind beide Arrays gleich und ich bekomme vernünftige Ergebnisse. Dann ändere ich eines der Arrays und passe zwei neue Slices an, aber es sagt immer noch, dass die Slices identisch sind. Wenn ich die Slices jedoch in Arrays kopiere, zeigt das Smart-Matching der Arrays, dass sie tatsächlich verschieden sind.

Das Skript:

%Vor%

Die Ausgabe:

%Vor%

Ich benutze Perl 5.10.1, und zwar sowohl für Array-Slices als auch für Hash-Slices. Warum passiert das?

    
askucins 07.02.2012, 12:21
quelle

3 Antworten

5

Sieht so aus, als ob die intelligente Zuordnung im skalaren Kontext mit Slices funktioniert.

Betrachten Sie die folgenden Codestücke:

Ihr Fall:

%Vor%

Das ist wahrscheinlich, was Sie brauchen:

%Vor%     
JackTheRandom 07.02.2012, 12:34
quelle
3

Der intelligente Match-Operator ~~ zaubert Arrays, nicht Listen. Ein Array-Slice ist eine Liste, kein Array.

Aktualisierung:

Sie können es lösen, indem Sie Ihre Slices in Klammern einschließen, da Smart Match automatisch Dereferenzierungen durchführt:

%Vor%     
choroba 07.02.2012 12:29
quelle
0

Zitat von askucins

Ich habe eine kurze Abfrage in den Perl-Dokumenten durchgeführt, die sich auf das unterschiedliche Verhalten dieses Tests gegenüber der Perl-Version beziehen, und ich fand, dass dies in Perl 5.13.5 behoben wurde. Weitere Informationen finden Sie unter "Intelligente Übereinstimmung mit Array-Slices" in perl5135delta :

  

Zuvor führte der folgende Code zu einer erfolgreichen Übereinstimmung:

%Vor%      

Dieses seltsame Verhalten wurde behoben. [ perl # 77468 ].

    
ThisSuitIsBlackNot 23.05.2017 12:06
quelle

Tags und Links