निम्न स्क्रिप्ट स्मार्ट मैचों दो सरणी के स्लाइस। शुरुआत में, दोनों सरणी समान हैं और मुझे उचित परिणाम मिल रहे हैं। फिर मैं एक नए सरणी को बदलता हूं और दो नए स्लाइसों को स्मार्ट-मेल करता हूं, लेकिन यह अभी भी कहता है कि स्लाइस समान हैं। हालांकि, जब मैं सरणी को सरणी में कॉपी करता हूं, तो सरणी से मेल खाने वाले स्मार्ट दिखाते हैं कि वे वास्तव में अलग हैं।सरणी स्लाइस की तुलना करते समय स्मार्टमैच सही क्यों होता है जो अलग होना चाहिए?
स्क्रिप्ट:
#!/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
मैं पर्ल 5.10.1 का उपयोग कर रहा है, और यह दोनों सरणी स्लाइस और हैश स्लाइस के लिए होता है। ऐसा क्यों होता है?
पर्ल का कौन सा संस्करण आप उपयोग कर रहे हैं? 'V5.14.2' के साथ मुझे' बराबर', 'बराबर' और 'बराबर नहीं' मिलता है, 'बराबर नहीं'। – flesk