作者johnnycgi (红茶不加糖)
看板perl
标题Re: [问题] 要问一下my的语法和用法
时间Mon Sep 11 07:33:19 2006
※ 引述《drive55555 (蛇咬)》之铭言:
: 我去看了,可是在照我还是不太懂,
: 用my这个关键字来定义你自己所需要的区域变数??
: 这是什麽意思?
: 可以帮忙解释一下吗?谢谢!
首先我假设你对程式的结构有基本概念
起码我相信你知道副程式 (或自订函式) 是什麽
所谓的区域变数
指的是在某特定区块内
才可以被程式存取的变数
所谓的区块 (block)
通常是以一个副程式为作为单位
说的更通俗点就是在{与}之间
因此当然也可以是一个回圈内
使用区域变数的目的
在於减少程式出错的机会
提高程式可读性
并使程式方便维护
就如同一个公司各部门都可以有同样的器材
但是上面都会标记属於哪个部门一样意思
这样彼此就不会搞混
程式中也是如此
不同的副程式中有同样名称的变数但不会彼此混淆
↑尤其常常有许多副程式都在处理相同资料的时候...
最容易有使用的变数名称都相同的情况
自然程式的可读性跟维护性就大大提高了
这也是写程式基本的小技巧
my的语法有以下几种写法:
my $var;
my ($var1, $var2, $var3);
my @array;
my ($var, @array, %hash);
甚至
foreach my $z (@array) { # $z只在foreach回圈中可存取
do anything...
}
for (my $i; $i<=10; $i++) { # $i只在for回圈中可存取
do something...
}
while (my $x > 0) { # $x只在while回圈中可存取
do allthing...
}
习惯上附程式开头都会宣告该副程式内的区域变数
例如说:
my $myvar = 1; # 在整个程式内都可以被存取,因为主程式本身就是一个大区块
# 另外就所自己所知与经验,my宣告的变数无法跨档案
# 因为程式所在的档案本身也算一个区块
# 要宣告跨档案全域变数请用our
# 但如果副程式内有相同名称的区域变数,则区域变数优先
print '全域变数值=', $myvar;
sub mysub {
my $myvar = 2; # 在这边$myvar是区域变数
# 因此存取时优先於全域变数$myvar
print '区域变数值1=', $myvar;
}
mysub();
sub mysub2 {
my $myvar = 3;
print '区域变数值2=', $myvar;
}
mysub2();
print '全域变数值2=',$myvar;
结果就如你所想
全域变数值=1
区域变数值1=2
区域变数值2=3
全域变数值=1
彼此互不相干
在sub外的$myvar就如同是公用白板
每个人都可以写入抹除
mysub()内的$myvar就如同私人办公桌上的白板
只有座位上的人可以抹写
因此如果有一个程式必须在很多副程式内处理类似资料
自然就会有变数名称相似甚至相同的问题
如果不使用my宣告各副程式的区域变数
而共用一开始宣告的全域变数
很容易发生无法预料的後果
不知道这样说你有比较了解吗?
或许解释的不是很好
毕竟我不是科班出身
perl也是自修的
有错误疏漏的地方也还请各位板友指教
--
TEAM SENNHEISER
TEAM STAX
TEAM PHILIPS
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.244.41.15
※ 编辑: johnnycgi 来自: 60.244.41.15 (09/11 07:37)
※ 编辑: johnnycgi 来自: 60.244.41.15 (09/13 12:57)