Perl笔记:Perl语言入门(第六版) - 控制结构、子程序
来源:互联网 发布:openwrt 网络配置文件 编辑:程序博客网 时间:2024/04/27 13:38
操作符结合性与优先级
左 括号;给的参数的列表操作符
左 ->
++ --
右 **
右 \ ! ~ + -(单目操作符)
左 =~ !~
左 * / % x
左 + - .
左 << >>
具名的单目操作符(-X文件测试; rand)
< <= > >= lt le gt ge(“不相等”操作符)
== != <=> eq ne cmp(“相等”操作符)
左 &
左 | ^
左 &&
左 ||
.. ...
右 ?:
右 = += -= .=(赋值操作符)
左 , =>
列表操作符(向右结合)
右 not
左 and
左 or xor
比较操作符
控制结构
if unless elsif
if和unless的测试执行相反
if ( !defined $dino ) {
print "The value is undef.\n";
} elseif ($dino =~ /^-?\d+\.?$/) {
print "The value is an integer.\n";
} elseif ($dino eq '') {
print "The value is the empty string.\n"
} else {
print "The value is the string '$dino'.\n";
}
unless ($fred =~ /\A[A-Z_]\w*\z/i) {
print "The value of \$fred doesn't look like a Perl identifier name.\n";
}
while until
while和until的测试执行相反,前者为真时重复执行,后者为假时重复执行。
while ($count < 10){
}
foreach
foreach $rock (qw/ bedrock slate lava /){
}
表达式修饰符代码简写
print "$n is a negative number.\n" if $n < 0;
&error("Invalid input") unless &valid($input);
&greet($_) foreach @person;
print " ", ($n += 2) while $n < 10;
裸块
{} 可以限制临时变量的作用域
for
for ($i = 1; $i <= 10; $i++){
}
在Perl解析器里,for和foreach关键字是等价的,有分号就是for循环,否则就是foreach循环。
for (1..10) {
}
循环控制
last 跳出最内层循环 对for foreach while until 裸块起作用。
next 立即开始下一次循环
redo 将控制返回到当前循环块的顶端,不经过任何条件测试,重新执行本次迭代。
带标签的块
LINE:while (<>){
last LINE if ();
}
last/next/redo后可以加上标签,可用于跳出多层循环。
条件操作符
?: 三目运算符
逻辑操作符和短路行为
逻辑操作符在通过左侧表达式能够确定总体的逻辑值时,不会再计算右侧的表达式,称为逻辑操作的短路行为。
Perl的逻辑操作符求取的值不是布尔,而是最后运算的表达式的值,可以用于赋值。my $last_name = $last_name{$someone} || '(No last name)';
定义或操作符 //
左边的值已定义时执行右边运算。
my $last_name = $last_name{$someone} // '(No last name)';判断是否定义和逻辑假不同。
逻辑操作符代替控制结构
通常不使用此写法,但有例外用法:open my $fh, '<', $filename or die "Can't open '$filename': $1";
子程序
基本用法
定义:sub marine {}
调用:&marine
所有的子程序都有返回值,但不一定有用。最后一次运算的结果会被自动当成子程序的返回值。
sub sum_of_fred_and_barney {
print "Hey, you called the sum_of_fred_and_barney subroutine!\n";
$fred + $barney; #这个不是返回值!
print "Hey, I'm returning a value now!\n";#糟糕!
}
返回最后执行的print的返回值,通常是1,表示成功输出信息。相加的结果被丢弃,但在启用警告时,会给出警告。
参数
子程序可以有参数,Perl会将参数列表化名为特殊的数组变量@_,该变量在子程序执行期间有效。
访问参数使用$_[0], $_[1];
调用子程序时,多余的参数会被忽略,参数不足时得到undef。
@_是子程序的私有变量,如果有全局的@_,则该全局变量会先被保存起来,并在子程序结束后恢复。
子程序也可以返回列表。
变长参数列表
在编写子程序时,应尽量支持变长参数列表。
$maxinum = &max(3, 10, 4, 7, 9);
sub max {
my ($max_so_far) = shift @_;
foreach (@_){
if ($_ > $max_so_far){
$max_so_far = $_;
}
}
$max_so_far;
}
在空参数列表调用时,返回undef。
my
子程序中可以使用my操作符创建私有变量,又叫词法变量my 操作符不会改变上下文
声明多个词法变量时,需要加括号 my($fred, $barney);
也可以创建私有数组 my @phone_number;
编译指令
use strict
告诉Perl内部编译器,接下来的代码应该稍加严谨一点,遵循一些优良的编程风格。
use 5.012
指定最低Perl版本号,版本号为三位数字。使用5.12版本将隐式打开strict约束指令。
return
return操作符 立即停止执行并从子程序返回某个值。
省略&
如果编译器在调用子程序前看到过子程序定义,或者Perl通过语法规则判断它只能是子程序调用,那么该子程序可以像内置函数一样,在调用时省略与号。
如果子程序和Perl内置函数同名,调用时必须使用与号。
state
持久性私有变量 state,可以用于任意类型变量。多次调用时,子程序持久性私有变量可以保持该值。
对数组和哈希,state类型变量有限制,不能在列表上下文中初始化这两种类型的state变量。
state $n = 0; #正确
state @array = qw ( a b c); #错误。
- Perl笔记:Perl语言入门(第六版) - 控制结构、子程序
- Perl笔记:Perl语言入门(第六版) - 数据类型
- Perl语言入门笔记 第四章 子程序
- Perl笔记:Perl语言入门(第六版) - IO文件目录
- Perl笔记:Perl语言入门(第六版) - 正则表达式、字符串
- Perl笔记:Perl语言入门(第六版) - 智能匹配、given-when
- Perl笔记:Perl语言入门(第六版) - 切片、捕获错误
- Perl语言入门(第五版) 读书笔记(五)---其他控制结构、Perl模块
- Perl语言入门(第六版)(影印版)
- Perl语言入门——子程序
- 《Perl语言入门》第四章 子程序
- PERL语言入门:第四章:子程序(函数)
- <Perl语言入门>读书笔记 | 四. 子程序
- PERL语言的子程序
- perl语言入门笔记
- perl语言入门笔记
- Perl语言入门(第五版) 读书笔记(一)---列表、数组、子程序
- perl子程序学习笔记
- ruby 语法(ARGV,传参数)--读取文件档案
- assert在debug和release中的有效与失效
- java操作XML
- [leetcode]Longest consecutive sequence
- 如何不让tomcat显示目录文件列表
- Perl笔记:Perl语言入门(第六版) - 控制结构、子程序
- 杭电 2044 一只小蜜蜂...
- SRM 605 D2 L3: AlienAndSetDiv2,DP
- PB12.0 开发 webService 注意事项
- c语言
- android自带音乐播放器删除音乐失败的问题
- C++还是Java,职场新人的困惑
- org.apache.commons.dbcp.BasicDataSource连接池配备属性
- 发给加入我赶快购房者大会坑货黑楼孤魂固定的放歌