Следующий скрипт смарт-сопоставляет фрагменты двух массивов.В начале оба массива одинаковы, и я получаю разумные результаты.Затем я меняю один из массивов и сопоставляю два новых среза, но он все равно говорит, что срезы идентичны.Однако, когда я копирую срезы в массивы, интеллектуальное сопоставление массивов показывает, что они действительно разные.
Сценарий:
#!/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, и это происходит как для фрагментов массива, так и для хеш-фрагментов.Почему это происходит?