[ID 20010711.005] in Tie::Array, SPLICE ignores context, breaking SHIFT
daniel@biz.bitpusher.com [Wed, 11 Jul 2001 23:25:47 +0000 (16:25 -0700)]
Message-Id: <200107120625.f6C6PkJ13065@biz.bitpusher.com>

p4raw-id: //depot/perl@11306

lib/Tie/Array.pm
t/op/splice.t

index 8821783..7703c13 100644 (file)
@@ -11,7 +11,6 @@ sub DESTROY { }
 sub EXTEND  { }
 sub UNSHIFT { scalar shift->SPLICE(0,0,@_) }
 sub SHIFT { shift->SPLICE(0,1) }
-#sub SHIFT   { (shift->SPLICE(0,1))[0] }
 sub CLEAR   { shift->STORESIZE(0) }
 
 sub PUSH
@@ -70,7 +69,7 @@ sub SPLICE {
     for (my $i=0; $i < @_; $i++) {
         $obj->STORE($off+$i,$_[$i]);
     }
-    return @result;
+    return wantarray ? @result : pop @result;
 }
 
 sub EXISTS {
index 3b4229a..d1bfe99 100755 (executable)
@@ -1,6 +1,6 @@
 #!./perl
 
-print "1..10\n";
+print "1..12\n";
 
 @a = (1..10);
 
@@ -37,4 +37,18 @@ print "ok 9\n";
 print "not " unless j(splice(@a)) eq j(1,2,7,3) && j(@a) eq '';
 print "ok 10\n";
 
+# Tests 11 and 12:
+# [ID 20010711.005] in Tie::Array, SPLICE ignores context, breaking SHIFT
+
+my $foo;
+
+@a = ('red', 'green', 'blue');
+$foo = splice @a, 1, 2;
+print "not " unless $foo eq 'blue';
+print "ok 11\n";
+
+@a = ('red', 'green', 'blue');
+$foo = shift @a;
+print "not " unless $foo eq 'red';
+print "ok 12\n";