Perl的变量定义域问题

mysam 2009-04-01 11:58:47
写了一个得到数组中重复元素的函数
sub get_uni_rearray #取得数组中的重复元素建立新的数组 (1,2,6,3,1,2,54,1,2,2) 输出 (1,2)
{
@array=@_;
Loop:for($k=0;$k<=$#array;$k++) {
for ($m=0;$m<$k;$m++) {
if ("$array[$k]" eq "$array[$m]") {
for ($l=0;$l<=$#nr_array;$l++){
if ("$array[$k]" eq "$nr_array[$l]") {
next Loop;
}

}
push(@nr_array,$array[$k]);
next Loop;
}
}
}
return @nr_array;
####################################
测试
@test=('wang','wang','zhong','li','xi','xin','love','love');
@test2=(3,55,55,6,99,100,21,21,36,36,77,877);

@aaa=get_uni_rearray(@test);
print "@aaa";
print "\n";
@bbb=get_uni_rearray(@test2);
print "@bbb";
####################################
输出:
wang love
wang love 55 21 36

为什么测试@test2的时候会输出@test的内容,是有关变量定义域的问题吗?请教。


...全文
53 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2009-04-02
  • 打赏
  • 举报
回复
写Perl程序最好使用如下两个模块:
use strict;
use warnings;


一般我们在声明变量时使用my,使用my声明的变量,有点类似于C/C++中的局部变量,但语义实际上不是很一样。在Perl中,称之为Lexical Scope。
sub get_uni_rearray  #取得数组中的重复元素建立新的数组 (1,2,6,3,1,2,54,1,2,2)  输出 (1,2) 
{
my @array=@_;
...
}

在你的代码中,使用my将你使用的变量进行声明,可以解决你的问题。

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧