[oracle@jhoa 16]$ cat 1.pl
#!/usr/bin/perl
print "1.函数可放在任何地方.
";
while (1) {
&readline;
##输入等于q 就退出
last if ($line eq "q
");
sub readline {
$line = <STDIN>;
}
}
[oracle@jhoa 16]$ perl 1.pl
1.函数可放在任何地方.
q
变量;
全局变量:不加说明的变量为全局变量,在子程序中改变会覆盖已有的值。
局部变量my: 用my说明的变量如my $a;
my 定义的变量只有在该子程序中存在。
局部变量my:用my 说明的变量如my $a;
my定义的变量只在该子程序中存在
my定义的变量在程序块内存在,包括在程序块内部定义的程序块也可见。在程序块外撤销。如果在主程序开头定义
时相当于全局变量。
程序块时由{}包含的语句,if,while,sub都可以定义程序块
[oracle@jhoa 16]$ cat 2.pl
print "2.用别名传递
";
$foo = 26;
@foo = ("here's","a","list");
&testsub (*foo);
sub testsub {
local (*printarray) = @_;
print "$printarray
" ;
}
[oracle@jhoa 16]$ perl 2.pl
2.用别名传递
26
局部变量
local 定义的变量不存在与主程序中,但存在于该子程序和孩子程序调用的子程序中
sub spoof{
local ($value) = "temporary";
tellme();
}
sub tellme {
print "Current value is $value
";
}
用my时$value只存在于spoof中,tellme是另一个块,其中的$value中不同的变量。
用local 变量可在调用的子程序出现,可以打印出值。
LOCAL 在本块内改变全局变量的值如$/.出了块就恢复。内部变量不能用my声明。
调用子程序:
无论子程序定义在什么地方都可用&调用子程序
常用调用:subname(1,2);
只有在调用之前已经定义的子程序才可以省略&
sub subname{}......subname;
前向引用: 先声明,再调用,再定义。