设为首页 收藏本站
查看: 865|回复: 0

[经验分享] perl学习笔记(二)

[复制链接]

尚未签到

发表于 2017-5-18 08:59:17 | 显示全部楼层 |阅读模式
#!/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.";
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378615-1-1.html 上篇帖子: perl 导出导入 excel 下篇帖子: perl中的引用类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表