`

perl学习笔记(二)

    博客分类:
  • Perl
阅读更多
#!/usr/bin/perl

use 5.010;

#词法与动态作用域
$a = 20; #全局变量
{
    local ($a); #临时变量,保存全局变量,新值为undef
    $a = 10;
    #say $a;
}
#say $a;

#Typeglob创建标识符别名
#local临时别名
$b = 30;
{   
    #local (*b);
    local *b; #创建临时别名(保存全局*b的值,然后将新值赋为undef)
    *b = *c;  #创建变量c的别名b
    $b += 10;
}
say $c;
say $b;
say "----------------------";
@array = (10,20);
&define_function(*array);
*fun = *define_function;#给函数定义别名
&fun(*array);#给函数定义别名
#my @array = (10,20);
#&fun(*array);
say "@array";
sub define_function{
    local *copy = shift;
    foreach (@copy) {
        $_ *=2;
    }
}
say "----------------------";
$x = 10;
&foo(*x);
sub foo{
    local (*y) = @_;
    say "before....$y";
    local ($x) = 100;
    say "aftet....$y";
}
say $x;

#创建只读变量
*num = \10.11;
say $num;
#$num =10;#修改将会报错

#为匿名子例程定义别名
sub operate{
    my($greting) = @_;
    sub{say "$greting world";}
}
$rs = operate("hello");
#&$rs();
*greting = $rs;#定义别名
greting();#等价于 &$rs


#I/O重定向
#open(F,'>>io.txt')|| die 'cannot io opera';
#*STDOUT = *F;#别名
#say 'Hello World.';

#把文件句柄传递给子例程
open(F,'>io.txt') || die 'cannot sent.$!';
sub read_and_print{
    local (*G) = @_; #文件句柄G与文件句柄F相同
    while(<G>){
        say 'cannot send..';
    }
    say 'cannot send..';
}
&read_and_print(*F);

#close(F);

#子例程引用
sub greet{
    say "hello";
}
$rs = \&greet;#对有名子例程的引用;
#$rs = \&greet();#错误
#对匿名子例程的引用
$rs = sub{
    say "hello";
};
#对子例程引用的间接访问(2种方式)
&$rs(10,20);
$rs->(10,30);

#如果中间的调用同样返回对子例程的引用的话,子例程调用可以连接起来
sub test1{
    my $args = shift;
    say "$args";
    return \&test2;
}
sub test2{
    my $args = shift;
    say " and $args";
}
$rs = \&test1;
$rs->("hellos")->("worlds");

#符号引用(引用的只是字符串而不是真正的引用)
sub foo{
    say "foo called!";
}
$rs = "foo";
&$rs();
say '----------调度表demo-------------';
#使用子例程引用(回调函数)
#调度表(#rl为数组引用,rh为散列表引用)
@ARGV = ("-f","-r",'aa','-h');
%options = (
    "-h"    =>      \&help,
    "-f"    =>      sub{$askNoQuestions = 1;say '-f...called'},
    "-r"    =>      sub{$recursive = 1;say '-r...called'},
    "-default"   =>    \&default,
);
&processArgs(\@ARGV,\%options);
sub default{
	say "sub default called!";
}
sub processArgs{
	my($rlArgs,$rhOptions) = @_;
	foreach $arg(@$rlArgs){
		if(exists $rhOptions->{$arg}){
			#$rsub = $rhOptions{$arg};
			#&$rsub();
			&{$rhOptions->{$arg}}();
		}else{
			if (exists $rhOptions->{"-default"}) {
				&{$rhOptions->{"-default"}}();
			}
		}
	}
}
sub help{
	say 'help..called';
}

say "----------------eval-------------------------------------";
$str = '$a=10;$b=20;$a+$b';
$re = eval $str;
say $re;
eval{
	$a = 10;
	$b = 0;
	$c = $a / $b;
};
say $@;#异常信息保存在$@
say "----------------eval表达式计算--------p112-----------------------------";
#$str = 2 * log(10);
$str = 10+10;
$str = 'aaa"saas"';
$str = 'for(1..10){say $_,"->"}';
while(defined($str)){
	$result = eval $str;
	if($@){
		say "Invalid string:$str";
	}else{
		say "$result";
	}
	last;
}
say "----------------超时中使用eval-----------------------------";
sub time_out{
	die "GOT TIRED OF WAITING";
}
$SIG = \&time_out;
eval{
	alarm(10);#10秒后终止
	$bug = <>;
	alarm(0);
};
if($@ =~ /GOT TIRED OF WAITING/){
	print "Timed out.Processing with default.";
}
分享到:
评论

相关推荐

    perl个人学习笔记

    Perl是一种强大的脚本编程语言,...以上就是Perl学习笔记中涵盖的一些基础概念和操作。继续深入学习,你将能够编写更复杂的Perl脚本,解决各种实际问题。记得实践是学习编程的关键,多做练习,逐步提升你的Perl技能。

    perl学习笔记

    以下是对Perl学习笔记中提到的关键知识点的详细说明: 1. **标量**: 标量是Perl中最基本的变量类型,用于存储单个值,如字符串或数字。变量名前缀是美元符号“$”。例如,`$first_name = "Melanie"`定义了一个名...

    Perl学习笔记中的所有脚本文件

    Perl学习笔记中的所有脚本文件,https://blog.csdn.net/zgezi/category_10259467.html

    perl学习笔记参考

    ### Perl学习笔记参考 #### Perl简介 Perl是一种高级编程语言,全称为Practical Extraction and Report Language,由Larry Wall创建,并持续由他进行更新与维护。Perl最初被设计用于Unix环境下的编程任务,随着...

    perl学习笔记。。。

    本书是perl的经典入门书籍,介绍了perl中最基本的概念和语法,是perl入门的好书,我向所有想了解或学习perl语言的朋友推荐本书。书中穿插有perl语法形成的历史和原因,使你能充分感受到perl语言的文化,这也是perl...

    perl 学习笔记和心得

    Perl确实是一种非常吸引人的程序语言,而之所以这么引人入胜的原因不单单在于他的功能,也在于他写作的方式,或说成为一种程序写作的艺术。即使你只是每天埋首于程序写作的程序设计师,也不再让生活过份单调,至少你...

    perl 语言学习笔记

    ### Perl 语言学习笔记知识点概览 #### 第一章:Perl 语言简介及基础语法 - **Perl 的定义**:Perl 是 Practical Extraction and Report Language 的缩写,是一种强大的脚本语言,广泛应用于文本处理、系统管理...

    perl学习资料!个人学习perl的笔记

    ### Perl语言学习笔记 #### Perl语言概述 - **高级语言与低级语言**: 在这篇笔记中,作者首先区分了高级语言和低级语言。高级语言指的是脚本语言,这类语言通常不直接操作底层硬件,例如Shell和Awk。低级语言则...

    perl学习笔记,让你更容易入门

    ### Perl学习笔记:快速入门与面向对象编程 #### 基础概念介绍 Perl是一种功能强大的脚本语言,被广泛应用于系统管理、网络编程、文本处理等领域。它具有丰富的内置函数和灵活的数据类型,能够方便地处理各种复杂...

    Perl学习笔记.docx

    Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务中广泛应用。...深入学习Perl,可以提升文本处理、系统管理以及自动化任务的效率。通过不断实践和探索,你可以掌握这个强大工具的所有潜力。

    Perl学习笔记

    ### Perl学习笔记关键知识点 #### 1. Perl简介 - **定义**:Perl是一种脚本语言,被设计用于处理文本文件、提取信息并生成报告。它由Larry Wall在1987年创建,目的是为了弥补当时其他语言如C、sed、awk等在处理文本...

    perl的学习笔记1

    这份"perl的学习笔记1"很可能是作者在深入学习Perl过程中积累的宝贵资料,包括他自己编写的小程序和学习心得。 首先,Perl语言的核心特性是其灵活性和适应性。它的语法混合了C、sed、awk等语言的特点,使得它既适合...

    Perl 学习笔记

    ### Perl学习笔记 #### 第1章:Perl简介与基本语法 - **Hello, World!**:Perl中的第一个程序通常是从“Hello, World!”开始的。例如: ```perl #!/usr/bin/perl print "Hello, world!\n"; ``` 或者简化为: ...

    Perl语言入门学习笔记

    Perl语言是一种功能强大的脚本编程语言,尤其适合文本处理和系统管理任务。本文将深入探讨Perl的命令行应用,帮助初学者快速入门。 首先,Perl有很多命令行参数,这些参数可以增强Perl程序的功能和安全性。其中,`-...

    perl脚本语言学习笔记心得

    这个文档中记录和总结了我学习perl脚本语言的一些经验和初学者需要注意的事情

Global site tag (gtag.js) - Google Analytics