La siguiente secuencia de comandos coincide con las divisiones de dos matrices. Al principio, ambas matrices son iguales y obtengo resultados razonables. Luego modifico una de las matrices y comparto inteligentemente dos nuevas divisiones, pero todavía dice que las rebanadas son idénticas. Sin embargo, cuando copio las divisiones en matrices, la coincidencia inteligente de las matrices muestra que son realmente diferentes.¿Por qué Smartmatch devuelve verdadero al comparar segmentos de matriz que deberían ser diferentes?
El guión:
#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;
my @x = qw (one two);
my @y = qw (one two);
my @x_s;
my @y_s;
print "Before change: values are the same:\n";
@x_s = @x[0,1];
@y_s = @y[0,1];
print "\@x_s: @x_s\n";
print +(@x[0,1] ~~ @y[0,1]) ? "equal\n" : "not equal\n";
print +(@x_s ~~ @y_s) ? "equal\n" : "not equal\n";
$x[0]='three';
print "After change: values should be different:\n";
@x_s = @x[0,1];
@y_s = @y[0,1];
print "\@x_s: @x_s\n";
print +(@x[0,1] ~~ @y[0,1]) ? "equal\n" : "not equal\n";
print +(@x_s ~~ @y_s) ? "equal\n" : "not equal\n";
La salida:
Before change: values are the same:
@x_s: one two
equal
equal
After change: values should be different:
@x_s: three two
equal
not equal
estoy usando Perl 5.10.1, y esto ocurre para ambos segmentos de matriz y las rodajas de patata. ¿Por qué pasó esto?
¿Qué versión de Perl estás usando? Con 'v5.14.2' obtengo' igual', 'igual' y' no igual', 'no igual'. – flesk