Calling Conventions and Pass By Reference
Simon Wistow
simon at thegestalt.org
Tue Sep 2 21:42:15 BST 2008
On Tue, Sep 02, 2008 at 09:07:18PM +0100, Raphael Mankin said:
> I think that you are confusing call by reference with call by name. With
> call by name every parameter is actually a subroutine that evaluates the
> parameter when you use it, as in Algol 60 of blessed memory.
Sorry, I was being a little confusing.
What I meant to get across was that most programmers think the first way
(c doesn't change even when a or b does).
What pass by reference could do is make it much more common to have bugs
where you accidentally change something out from under your caller, for
example (albeit contrived)
my $url = get_url();
check_mirrors_of_url($url);
sub check_mirrors_of_url($url) {
my $check = true;
for ($mirror in get_mirrors()) {
$url->host = $mirror; # BZZT! Should have cloned first
$check &&= HEAD($url);
}
}
print $url->host; # last mirror, not original
Which will start to lead to defensive programming like
my $tmp = $url->clone;
check_mirrors_of_url($tmp);
which is an awful waste.
More information about the london.pm
mailing list