Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

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
Node Status?
node history
Node Type: note [id://45973]
[ozboomer]: Howdy, all.. Trying this once more... Not really a perl question :(... but I don't know how to even title my query (more...)
[ozboomer]: There's a text file with lots of sections in it, like an '.ini/.conf' file. Each section can be 'used' or 'unused' by its application (more...)
[ozboomer]: Some folk want to use the text file as 'storage', keeping ALL items in it (a database); others call it an 'active document' that should only contain 'in-use' sections. Is there a 'good practice' for this sort of thing?

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2018-05-21 00:26 GMT
Find Nodes?
    Voting Booth?