use strict; use warnings; my @arr = (1, 2); print qq{At initialisation\n Contents are @arr\n}; assignTo(@arr); print qq{ Contents now @arr\n}; listArgs(@arr); print qq{ Contents now @arr\n}; loopOver(@arr); print qq{ Contents now @arr\n}; refTo(@arr); print qq{ Contents now @arr\n}; shiftArgs(@arr); print qq{ Contents now @arr\n}; useDirect(@arr); print qq{ Contents now @arr\n}; sub assignTo { my @temp = @_; print qq{In assignTo - assign to \@_\n}; map { $_ ++ } @temp; @_ = @temp; } sub listArgs { my ($var1, $var2) = @_; print qq{In listArgs - list of lexicals\n}; $var1 ++; $var2 ++; } sub loopOver { print qq{In loopOver - loop over \@_\n}; $_ ++ for @_; } sub refTo { my ($rsVar1, $rsVar2) = \(@_); print qq{In refTo - take reference to \@_ elements\n}; $$rsVar1 ++; $$rsVar2 ++; } sub shiftArgs { my $var1 = shift; my $var2 = shift; print qq{In shiftArgs - lexicals via shift\n}; $var1 ++; $var2 ++; } sub useDirect { print qq{In useDirect - increment elements directly\n}; $_[0] ++; $_[1] ++; }
The output produced is
At initialisation Contents are 1 2 In assignTo - assign to @_ Contents now 1 2 In listArgs - list of lexicals Contents now 1 2 In loopOver - loop over @_ Contents now 2 3 In refTo - take reference to @_ elements Contents now 3 4 In shiftArgs - lexicals via shift Contents now 3 4 In useDirect - increment elements directly Contents now 4 5
A very interesting topic that has cleared up some misunderstandings.
Cheers,
JohnGG
In reply to Re^3: Why does assignment change the result?
by johngg
in thread Why does assignment change the result?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |