use strict; use warnings; use feature qw'say state'; use diagnostics -verbose; #use Test::More test=>1; A B my @x @y Scalar Context my @x; my @y; if( ( fork() ) == 0 ){ if( ( fork() ) == 0 ){ say 'A: scalar context'; @x ? do{say 'A @x not empty'} : do{say 'A @x empty'}; my $s = shift @x; @x ? do{say 'A $s = shift @x; @x not empty'} : do{say 'A $s = shift @x; @x empty'}; defined $s ? do{say 'A defined $s'} : do{say 'A undefined $s'}; print "\n"; say 'A: scalar context'; @y ? do{say 'A @y not empty'} : do{say 'A @y empty'}; my $u = splice( @y,0,1 ); @y ? do{say 'A $u = splice @y; @y not empty'} : do{say 'A $u = splice @y; @y empty'}; defined $u ? do{say 'A $u = splice @y; defined $u'} : do{say 'A $u = splice @y; undefined $u'}; print "\n"; }else{ say 'B: scalar context'; undef @x; @x ? do{say 'B undef @x; @x not empty'} : do{say 'B undef @x; @x empty'}; my $t = shift @x; @x ? do{say 'B $t = shift undef @x; @x not empty'} : do{say 'B $t = shift undef @x; @x empty'}; defined $t ? do{say 'B $t = shift undef @x; defined $t'} : do{say 'B $t = shift undef @x; undefined $t'}; print "\n"; say 'B: scalar context'; undef @y; @y ? do{say 'B undef @y; @y not empty'} : do{say 'B undef @y; @y empty'}; my $v = splice( @y,0,1 ); @y ? do{say 'B $v = splice undef @y; @y not empty'} : do{say 'B $v = splice undef @y; @y empty'}; defined $v ? do{say 'B $v = splice undef @y; defined $v'} : do{say 'B $v = splice undef @y; undefined $v'}; print "\n"; exit; } say "A B Done\n"; exit; }else{ say "\n",'A B my @x @y Scalar Context',"\n"; }