上下文问题:
perl中执行表达式,要不返回一个标量,要不返回一个列表
#!/usr/bin/perl -w
use strict;
my @array=qw(fred wang ling);
my @copy_array=@array;
my $num=@array;
print $num,"\n";
foreach(@copy_array)
{
print $_,"\n";
}
result:
3
fred
wang
ling
子程序:
在perl中子程序可以定义在任意的位置,没有任何的限制。甚至可以进行重复定义,这样后面的会覆盖前面的,但是如果使用了警告的话程序会发出提示警告。
返回值:
所有的perl程序都有返回值,所以perl的创始人Larry将return简化,默认去掉
#!/usr/bin/perl -w
#use strict;
use 5.010;
sub sum_var{
print "The sum of array:","\n";
$fred+$ning;
}
$fred=3;
$ning=4;
$sum_a=&sum_var;
print $sum_a,"\n";
此时默认加和的结果是返回值
作用域:
在不使用use strict前提下,任何直接使用的变量都是全局的,但使用了use stric之后变量在使用前必须声明定义。
私有变量:
私有变量的创建是my
临时变量:
临时变量的创建用local
#!/usr/bin/perl -w
use strict;
my $max_value=&max_value(3,2,5,7,1);
print $max_value,"\n";
sub max_value
{
my $temp_max=shift @_; #选出第一个
foreach(@_) #遍历剩下的
{
if($temp_max<$_)
{
$temp_max=$_;
}
}
$temp_max; #得出最大的值
}
判断某个元素是否存在于一个数组中:
#!/usr/bin/perl -w
use strict;
my @names=qw/fred wang ling xin/;
my $result=&which_element_is('wang',@names);
print $result,"\n";
sub which_element_is
{
my($what,@array) =@_;
foreach(0..$#array)
{
if($what eq $array[$_])
{
return $_;
}
}
-1;
}
省略与号:
如果调用的子程序只能是以函数处理,或者在调用之前已经看到过子函数的定义则说明可以省略与号。
注意:如果自己定义的子程序和内置函数同名,则必须要加&符号,这样就告诉编译器是调用自己定义的子程序,而不是内置的函数。
持久性私有变量:state
类似于C语言中的静态变量
钻石操作符:<>
#!/usr/bin/perl -w
use strict;
use 5.010;
while(<>) #<>可以直接作用输入行
{
chomp; #chomp会默认运行在$_上
print "I saw $_ elements.","\n" ;
}
调用参数:
钻石操作符其实并不是读取的命令行参数,而是@ARGV数组,这个数组中的元素会自动填满所有的命令行参数,它和普通数组的操作一样。
#!/usr/bin/perl -w
use strict;
use 5.010;
@ARGV=qw/fred wang ling bingo/;
while(<>)
{
chomp;
print "I saw $_ elements.","\n" ;
}