引用
在很多场合下使用引用传值,能在很大程度上提高代码的运行效率。
定义一个引用在变量名前加”\”就可以了,如:
$ra=\$a;
$rb=\@b;
$rc=\%c;
变量名前面依然是$。
而得到的引用是不能直接当做变量使用,需要解引用。解引用的方法是在变量名前加上变量原本类型所对应的符号。比如$rb是对一个数组的引用,那为了得到数组,就可以使用@$rb来得到整个数组。可以通过两种方式访问数组中数据,一种是$$rb[1],另一种是使用“->”符号$rb->[1]。明显第二种方式更加简洁。对哈希的操作类似$$rc{a},$rc->{a}。
匿名存储
匿名数据结构也是经常用到的,比如在useragent的post方法中会传递一个匿名的hash表。
匿名数组的创建不再是使用(),而是[];同样匿名hash使用{}创建,而不是()。
注意,它返回的是引用!
$ra={'a'=>1,'b'=>2};
$ra->{a}=3;
print $$ra{a};
特殊用法
$str = 'my name';
$strstr='your name';
echo "${str}str is hello"; //my namestr is hello
echo "$strstr is hello"; //your name is hello
echo "$strabc is hello"; // Undefined variable: strabc in
{}的作用是限制变量名
sub函数(过程)
基本sub格式
sub subname{
local ($filevar) = @_;
local ($s1, $s1);
...
…
}
&subname; #调用加&
do my_sub(1, 2, 3); #另一种调用方式:do调用,等价于&my_sub(1, 2, 3);
基本的sub参数传递
实际是将参数@_赋值给局部变量
sub参数的两种表示方式:
整体形式(数组形式) @_
单独形式(数组元素形式) $_[ ]
#!/usr/bin/perl
&gotest("stringgogo",1,3,"4test");
sub gotest{
local($tmp1,$tmp2,$tmp3,$tmp4)=@_; #或my(@tmp)=@_;
print "no.1 para is ",$tmp1,"\n";
print "no.2 para is ",$tmp2,"\n";
print "no.3 para is ",$tmp3,"\n";
print "no.4 para is ",$tmp4,"\n";
}
#!/usr/bin/perl
&gotest("stringgogo",1,3,"4test");
sub gotest{
print "no.1 para is ",$_[0],"\n";
print "no.2 para is ",$_[1],"\n";
print "no.3 para is ",$_[2],"\n";
print "no.4 para is ",$_[3],"\n";
}