【发布时间】:2018-07-10 02:34:59
【问题描述】:
下面是我写的sn-p代码,这里的问题是$server变量不能在子程序内部传递。如何在子例程中传递全局变量的值。请帮忙!
use strict;
use warnings;
my (@list,$server);
@list = qw/server1.net server2.net server3.net/;
foreach $server(@list) {
#calling sub-routines
command1();
command2();
}
sub command1 {
print $server;
system("command1");
}
sub command2 {
print $server;
system("command2");
}
【问题讨论】:
-
为什么使用全局变量而不是将变量作为参数传递?
-
显而易见的答案是将
$server变量传递给子例程(command1($server))。但是您说“问题是 $server 变量不能在子例程中传递”。在这里阻止您这样做会很有趣。 -
(1) 变量不能是局部的,不能传给子程序,这是很不合理的。你必须很好地解释为什么会这样(2)鉴于
foreach (@servers) { func() };循环中的$_(每次迭代中的另一个服务器)在子func中看到$_,所以子是sub func { $server = $_ ... }。但这太可怕了,我希望你能正常、明确和透明地传递给函数它需要的东西。
标签: perl subroutine