Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Passing the value of a global variable inside a subroutine (updated)

by haukex (Archbishop)
on Jul 08, 2018 at 15:56 UTC ( [id://1218120]=note: print w/replies, xml ) Need Help??


in reply to Passing the value of a global variable inside a subroutine

The reason this doesn't work is because a foreach loop localizes its variable to the loop, and you're using a lexical (my) variable, so the localized value is not available outside of the loop:

The foreach loop iterates over a normal list value and sets the scalar variable VAR to be each element of the list in turn. If the variable is preceded with the keyword my, then it is lexically scoped, and is therefore visible only within the loop. Otherwise, the variable is implicitly local to the loop and regains its former value upon exiting the loop. If the variable was previously declared with my, it uses that variable instead of the global one, but it's still localized to the loop.

It's not good practice to pass arguments to subroutines as global variables, and I strongly recommend using actual subroutine parameters instead. Also, by the way, you should check the return value of system for errors; see its docs for details - I've just included the bare minimum below.

use warnings; use strict; my @list = qw/ server1.net server2.net server3.net /; foreach my $server (@list) { command1($server); command2($server); } sub command1 { my $server = shift; print "command1 on $server\n"; system("command1")==0 or die "command1 \$?=$?"; } sub command2 { my $server = shift; print "command2 on $server\n"; system("command2")==0 or die "command2 \$?=$?"; }

Update: I missed this initially:

the problem is $server variable cannot be passed inside the subroutines

Could you explain why not?

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2024-04-20 02:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found