全部博文(2005)
分类:
2010-04-16 16:25:01
perl之defined函数
检查变量是否为空值
$madonna =
If
(defined ($madonna)){
print “The input was $madonna”;
}else{
print “No input available!\n”;
}
Perl之有意思string重复操作符 x
“barney”x (4+1) # “barney”x 5, “barneybarneybarneybarneybarney”
Perl 之数组字符串列表 qw
qw(fred barney betty wilma dino );
但Perl 允许使用任何标点符号作为分界符
qw ! fred barney
betty wilma dino !
qw# fred barney betty wilma dino # #有些像注释
qw(
fred barney betty wilma dino )
qw{ fred barney betty wilma dino }
qw[
fred barney betty wilma dino ]
qw< fred barney betty wilma dino
>
如果要在字符串中使用闭分界符,很可能选择的分界符并不太恰当。如果不想或者不能改变分界符,那可以使用反斜线(\):
qw!Yahoo\! Google excite lycos
! #其中一个元素为:字符串yahoo!
($fred, $barney) = qw
($wilma,$dino) =
qw[flintstone]; #$dino 为undef
Perl之数组定义
($rocks[0],$rocks[1],$rocks[2],$rocks[3])
= qw/talc mica feldspar quartz/;
当想引用这个数组时,Perl
有一种简单的写法。在数组名前加@(后没有中括号)来引用整个数组。
@rocks = qw /talc mica feldspar quartz/;
Perl之数组 POP
pop 操作将数组的最后一个元素取出并返回
@array = 5..9;
$fred
= pop @array; #$fred 得到9,@array 现在为(5,6,7,8)
$barney =
pop @array; #$barney gets 8, @array 现在为(5,6,7)
pop
@array; #@array现在为(5,6)(7 被丢弃了)
Perl 之数组 PUSH
和 pop 相反的操作是push,它可以将一个元素(或者一列元素)加在数组的末尾
@array=5,6;
push
@array,0; #@array现在为(5,6,0)
push
@array,8; #@array现在为(5,6,0,8)
push
@array,1..10; #@array现在多了10 个元素
@others =qw/9 0 2 1 0 /;
push
@array,@others; #@array现在又多了5 个元素(共有19 个)
Perl之数 组 shift和unshift
push 和pop 对数组的末尾进行操作(或者说数组右边有最大下标的元素)。相应的,unshift 和shift 对一个数组的开头进行操作(数组的左端有最小下标的元素)。
@array = qw# dino fred barney
#;
$m = shift @array; #$m 得到“dino”, @array
现在为(“fred”, “barney”)
$n = shift @array; #$n
得到”fred”, @array 现在为(“barney”)
shift
@array; #@array 现在为空
$o = shift
@array; #$o 得到undef, @array 仍为空
unshift @array,5;
#@array 现在为(5)
unshift
@array,4; #@array 现在为(4,5)
@others = 1..3;
unshift
@array, @others; #array 现在为(1,2,3,4,5)
和pop
类似,如果其数组变量为空,则返回undef。
Perl之控制结构函 数 foreach
foreach $rock (qw/ bedrock slate lava
/){
print “One rock is $rock.\n”; #打印出3 种rocks
}
控制变量(本例中为$rock)每一次迭代从列表中取出一个新值。第一次为“bedrock”,第三次为
“lava”。
@rocks = qw/ bedrock slate lava /;
foreach
$rock(@rocks){
$rocks = “\t$rocks”;
#@rocks 的每一个元素前加入一个tab
$rocks . =
“\n”; #每一个元素后加一个换行符
}
print “The
rocks are:\n”,@rocks; #每一个元素都被缩进了,并且一个元素占一行
返回结果:
the
rocks are:
bedrock
slate
lava
如果有一个变量和控制变量有相同的名字:“$rock”,不用担心会混淆它们。
Perl之reverse操作
reverse(逆转)操作将输入的一串列表(可能是数组)按相反的顺序返回。
@fred
= 6..10;
@barney = reverse @fred; #得到10,9,8,7,6
@wilma
= reverse 6..10; #同上,没有使用额外的数组
@fred = reverse
@fred; #将逆转过的字符串存回去
注意最后一行,其中@fred 使用了2 次。Perl
通常先计算变量的值(赋值号右边),再进行赋值。
注意reverse
返回逆转的列表,它不会改变其参数的值。如果返回值没有赋值给某个变量,那这个操作是没有什么意义的:
reverse
@fred; #错误,没有改变@fred 的值
@fred =
reverse @fred; #改变了@fred 的值
Perl之sort操作
sort 操作将输入的一串列表(可能是数组)根据内部的字符顺序进行排序。
@rocks = qw/ bedrock slate
rubble granite /;
@sorted = sort @rocks;
#得到bedrock, granite, rubble, slate
@back = reverse sort
@rocks; #为slate 到bedrock
@rocks = sort
@rocks; #将排序的值写回@rocks
@numbers = sort
97..102; #得到100,101,102,97,98,99
从最后一个例子可以看到,如果将
数字按照字符串进行排序可能得到没有意义的结果。当然,默认的排序规则下,任何由1 开头的字符串先于由9 开头的字符串。和reverse
一样,其参数是不会受到影响的。如果想将某个数组排序,那必须将排序之后的结果存回数组中。