Почему smartmatch возвращает true при сравнении срезов массива, которые должны быть different?

Следующий скрипт сопоставляет срезы двух массивов. Сначала оба массива одинаковые, и я получаю разумные результаты. Затем я меняю один из массивов и сравниваю два новых среза, но он все равно говорит, что срезы идентичны. Однако, когда я копирую срезы в массивы, интеллектуальное сопоставление массивов показывает, что они действительно разные.

Сценарий:

#!/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";

Вывод:

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

Я использую Perl 5.10.1, и это происходит как с срезами массива, так и с срезами хэша. Почему это происходит?

8
задан ThisSuitIsBlackNot 20 September 2016 в 22:20
поделиться