Poniższy skrypt inteligentnie dopasowuje plasterki dwóch tablic. Na początku obie tablice są takie same i uzyskuję rozsądne wyniki. Następnie zmieniam jedną z tablic i dopasowuję dwa nowe plasterki, ale wciąż jest napisane, że plasterki są identyczne. Jednakże, kiedy kopiuję plasterki na tablice, inteligentne dopasowanie tablic pokazuje, że są one rzeczywiście różne.Dlaczego funkcja smartmatch zwraca wartość true, porównując wycinki tablic, które powinny być różne?
Skrypt:
#!/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";
Wyjście:
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
Używam Perl 5.10.1, a to dzieje się na obu tablicy plasterki i plasterki cebulą. Dlaczego to się dzieje?
Którą wersję Perla używasz? W 'v5.14.2' otrzymuję' equal', 'equal' oraz' not equal', 'not equal'. – flesk