From: Sudarsan Raghavan <[EMAIL PROTECTED]>
> Elias Assmann wrote:
>
> > On Tue, 11 Jun 2002, Jeff 'japhy' Pinyan wrote:
> > So Perl passes subroutine arguments by reference? I thought they
> > would be copies in the first place...
>
> No the args are only copies not references. The question was to return
> a modifed form of the argument without changing the argument. After
> the s/... statement the contents of the argument to rcsname i.e. $_[0]
> or some variable in rscname into which it has been shifted to should
> not change.
Then how come
$x = 'Hello';
sub foo {
$_[0] = 'Hi';
}
foo($x);
print $x,"\n";
prints
Hi
?
The parameters are passed by reference, though in little strange way.
If for example you include an array (and I mean array, not array
reference!) then the function gets the elements of the array ... but
still by reference:
$x = 0;
@a = (1,2);
sub foo {
for (@_) {
$_ += 10;
}
}
foo( $x, @a);
print "\$x = $x\n";
print "\@a = @a\n";
It's when you do the usual
my $var = shift;
or
my ( $a, $b, $c) = @_;
that Perl makes copies of the parameters. If you do not shift() and
access @_ directly you CAN modify the parameters.
Jenda
=========== [EMAIL PROTECTED] == http://Jenda.Krynicky.cz ==========
There is a reason for living. There must be. I've seen it somewhere.
It's just that in the mess on my table ... and in my brain
I can't find it.
--- me
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]