Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re: Re: subroutine syntax

by quidity (Pilgrim)
on Dec 11, 2000 at 00:40 UTC ( #45973=note: print w/replies, xml ) Need Help??

in reply to Re: subroutine syntax
in thread subroutine syntax

So, As I understand it, I don't have to pass a $variable into a subroutine call before i use the $variable inside the sub?

No, you don't have to pass the variable as an argument to the subroutine, but you will write clearer code if you do. By passing values, you know which values will affect the outcome of the subroutine without having to look through the code for the sub.

Also, does the $variable get modified globally if it is called directly inside the subroutines and modified?

Yes, anywhere that you modify a variable, you will modify the variable (with the exception of localised variables, where it gets a bit more complicated). You can still modify the variable sent to a sub, as @_ becomes an alias to the variables themselves so that:

$dog = 'spot';

Is exactly the same as:

sub dog_spot {$_[0] = 'spot'}; dog_spot($dog);

You can make a copy of the variable passed to the subroutine, so that changes do not propagate outside the sub so that code like this is safe:

sub foo {$_[0] =~ s/foo/bar/; print $_[0]} # bad sub bar {my $temp = $_[0]; $temp =~ s/foo/bar/; print $temp} # better

Thereason why you want to pass variables to subroutines as arguments, rather than by using global variables is that if you have a bug in your code, then using global variables means that the bug could be caused by any of the many lines in your program. If you pass variables as arguments, then the bug could only be caused by the lines which call the subroutine, or the subroutine itself.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://45973]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (2)
As of 2021-10-17 20:43 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (72 votes). Check out past polls.