perl 第十弹 函数III
Posted 流浪骆驼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl 第十弹 函数III相关的知识,希望对你有一定的参考价值。
上期回顾
splice替换 | 含义 |
|
shift | splice(ARRAY,0,1) |
起始位置0,步长1的元素移除,即为移除第一个元素 |
unshift |
splice(ARRAY,0,0,LIST) | 起始位置0,步长0的元素,即为起始位置前添加第一个元素 |
pop | splice(ARRAY,$#ARRAY,1) | 起始位置为列表最后的index,步长1的元素移除,即为最后一个元素 |
push |
splice(ARRAY,$#ARRAY,0,LIST) | 起始位置为列表最后的index,步长0的元素添加元素,即为列表最后添加一个元素 |
函数
reverse 函数负责翻转数组中元素的排列顺序,使得原本降序排列的数组元素变成升序,反之亦然。
用法:reverse(LIST)
@names=("Bob", "Dan", "Tom", "Guy");
@reversed=reverse(@names),"n";
print "@reversedn";
__END__
(output)
Guy Tom Dan Bob
用法:keys(HASH)
# 创建%weekday哈希
%weekday= (
'1'=>'Monday',
'2'=>'Tuesday',
'3'=>'Wednesday',
'4'=>'Thursday',
'5'=>'Friday',
'6'=>'Saturday',
'7'=>'Sunday',
);
# 通过keys函数,取到哈希%weekday的全部键,foreach逐个循环每个键
# 注意:哈希是无序的
foreach $key ( keys(%weekday) ){
print "$key ";
}
__END__
(output)
7 1 2 3 4 5 6
用法:values(HASH)
# 创建%weekday哈希
%weekday= (
'1'=>'Monday',
'2'=>'Tuesday',
'3'=>'Wednesday',
'4'=>'Thursday',
'5'=>'Friday',
'6'=>'Saturday',
'7'=>'Sunday',
);
# 通过values函数,取到哈希%weekday的全部值,foreach逐个循环每个值
foreach $value( keys(%weekday) ){
print "$value ";
}
__END__
(output)
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
each 函数能以随机顺序返回一个双元素数组,该数组的一个元素是散列表项的键,另一个元素则是该键所对应的值。
用法:each(HASH)
# 创建%weekday哈希
%weekday=(
'Mon' => 'Monday',
'Tue' => 'Tuesday',
'Wed' => 'Wednesday',
'Thu' => 'Thursday',
'Fri' => 'Friday',
'Sat' => 'Saturday',
'Sun' => 'Sunday',
);
# each函数返回哈希%weekday中的每个键及其对应值。
# 然后分别将这些键和值赋给标量, while逐个循环每个键值对
$key 与$value
while(($key,$value)=each(%weekday)){
print "$key = $value ";
}
__END__
(output)
Sat = Saturday
Fri = Friday
Sun = Sunday
Thu = Thursday
Wed = Wednesday
Tue = Tuesday
Mon = Monday
delete 函数负责从哈希中删除指定值。如果成功就返回删掉的这个值。
用法:delete $HASH{KEY}
# 创建%employees哈希
%employees=(
"Nightwatchman" => "Joe Blow",
"Janitor" => "Donald Trump",
"Clerk" => "Sally Olivetti",
);
# 根据指定的键,delete 函数将从散列中删除一个相应的元素。
# 在此过程中,该元素的键和值都会删除。
# 删除并返回与键Janitor 相关联的哈希
# 然后把返回值Donald Trump 赋予变量$layoff。
$layoff=delete $employees{"Janitor"};
print "We had to let $layoff go. ";
print "Our remaining staff includes: ";
print " ";
# while逐个循环每个键值对,查看%employees哈希中剩余的键值对
while(($key, $value)=each(%employees)){
print "$key: $value ";
}
__END__
(output)
We had to let Donald Trump go.
Our remaining staff includes:
Nightwatchman: Joe Blow
Clerk: Sally Olivetti
如果散列的键(或数组下标)已经定义,则exists 函数返回true,否则返回false。
用法:exists $HASH{KEY}
# 创建%employees哈希
%employees=(
"Nightwatchman" => "Joe Blow",
"Janitor" => "Donald Trump",
"Clerk" => "Sally Olivetti",
);
# 如果已经定义了键“Nightwatchman”,exists 函数会返回true。
# 如果 exists $employees{"Nightwatchman"} 返回的值为true
# 则执行11行语句
if ( exists $employees{"Nightwatchman"} ){
print "The Nightwatchman exists. "
};
__END__
(output)
The Nightwatchman exists.
上下文:
重点(理解上下文是perl入门的门槛):
如果出现在赋值运算符左侧的是标量的话,右侧表达式会在标量型上下文中求值;如果左侧变量是数组型的话,右侧的表达式则会在列表型上下文中求值。
# 创建数组@list
@list = (90,89,78,100,87);
$str="Hello, world";
# reverse 函数翻转一个数组的所有元素,并将翻转后的元素赋予另一个数组。
# 其上下文是列表型的。
@revlist = reverse(@list);
# reverse 函数翻转一个字符串的所有字符,并返回一个标量型的字符串。
# 其上下文是标量型的。
$revstr = reverse($str);
print "Reversed array is: @revlist ";
print "Reversed string is: $revstr ";
# 在这里,reverse 又一次对数组进行了翻转,
# 但这次生成的数组则会赋值给一个字符串。
# 由于其上下文是标量型的,
# 因此该函数会翻转数组的所有元素,然后把列表转换为一个字符串。
$newstring = reverse(@list);
print "List reversed, contextstring: $newstring ";
__END__
(Output)
Original array: 90 89 78 100 87
Original string: Hello, world
Reversed array is: 87 100 78 89 90
Reversed string is: dlrow ,olleH
List reversed, context string: 78001879809
总结
reverse函数、keys函数、values函数、each函数、delete函数含义用法
理解上下文
ps: HAPPY NEW YEAR
新年立下flag,一起学习,一起成长吧~
以上是关于perl 第十弹 函数III的主要内容,如果未能解决你的问题,请参考以下文章