#!/usr/bin/perl -w


print 2**4;


#创建对跟随其后项目的引用符号:\


$variable=5;


$reference=\$variable;


print "\n" . $$reference ."\n" ;


#绑定运算符:=~ 和 !=


#=~:将标量表达式绑定到模式匹配上


#=!:与运算符=~相似,不同的是它的返回值是负数。


#用use integer模块强迫perl使用整数除法




use integer;


print 16/3 ."\n";




#当从数字中连续剥离数位进行两种基数转换时,使用取模运算能减少操作:


$value=257;


while($value){


push @digits , (0..9,a..f)[$value%16];


$value /=16;


}


while(@digits){


print pop @digits;


}


print "\n";


#从整数末端获取数字位的方法,可用:&


print 24 &15 ."\n";




#一元运算符:不将参数放在园括号中时,perl将注入sqrt、defined、eval、return、chdir、rmdir、oct、hex、undef、exists和其他只接受一个标量的函数。


#如果想要在某个特定的十进制位精度上比较浮点数,使用:sprintf函数


#unless语句:当条件为假时才执行相关模块的代码。


#unless(EXPR)BLOCK


#unless(EXPR) BLOCK else BLOCK


#使用foreach变量:


#foreach var(LIST) BLOCK;


#foreach循环中的循环变量回过头去访问表中的实际元素,这意味着如果修改循环变量,这些修改了相应的表元素。


#map函数的工作:map:BLOCK LIST;  或者map:EXPR,LIST;


#PS:map是在表上下文下对BLOCK和EXPR进行计算,所以LIST表中的每个元素都可以在返回表中产生一个或多个元素(包括0个元素)




#------------------------------------Demo-------------------------------------------------


#给数组中的每个元素都乘以2


print "Every Element of Array muls 2 by foreach \n";


@a=(1..10);


foreach $_(@a){$_*=2;}


print join (", ",@a);


print "\n-----------------END---------------------\n";


print "Every Element of Array muls 2 by map \n";


@a=(1..10);


map{$_*=2;} (@a);


print join (", ",@a);


print "\n-----------------END---------------------\n";




#关键字来创建当前值的本地副本。




#grep的使用方法:grep BLOCK LIST;或者grep EXPR,LIST;


#grep函数为list中的每个元素进行BLOCK或者EXPR计算,返回由使表达式为真的元素组成的表。


#PS:在标量环境中,grep返回表达式为真的次数。


#PS:grep中的BLOCK和EXPE都是在标量环境计算的。


#grep和map的不同:grep返回的是子表,使特定准则为真,然而map函数对表中的每个元素的表达式进行求值。


#-------------------------------Demo---------------------------------------------------------


#在主数组中寻找所有大于5的数字


print "Search numbers lg 5 in Array by foreach \n";


@b=(1..13);


foreach $_(@b) {


if($_>5)


{push @c,$_;}


}


print join (", ",@c);


print "\n-----------------END---------------------\n";


print "Search numbers lg 5 in Array by grep \n";


@b=(1..13);


@c=grep{$_>5;} @b;


print join (", ",@c);


print "\n-----------------END---------------------\n";




#next跳到下一个循环重复过程


#last命令结束循环:last expr;


#redo重复循环的当前步骤。




#-----------------------------SWITCH Demo------------------------------------------------------


#使用&&操作符,当第一个操作 对象为真时,才执行第一个对象,通过将$_中的值和用户输入的各种字符串进行比较


# print "\n-------------------------------Start Switch-----------------------------------\n";


# print "Enter Command:";


# while(<>){


# SWITCH:{


# /run/ && do{


# $message="Running\n";


# last SWITCH;


          # };


# /stop/ && do{


# $message="Stopped\n";


# last SWITCH;


          # };



# /connect/ && do{


# $message="Connected\n";


# last SWITCH;


          # };



# /find/ && do{


# $message="Found\n";


# last SWITCH;


          # };



# /q/ && do{


# exit;


          # };


    # DEFAULT: $message="No match.\n";


# }


# print $message;


# print "Enter Command:";


# }


# print "\n-------------------------------End Switch-------------------------------------\n";






#使用eval语句来计算perl代码:eval EXPR 或者 eval BLOCK


#PS:在perl中可以使用两种形式的eval:一种可以执行表达式EXPR;另一种可则执行整块BLOCK。


#上面两种情况,eval返回值都是eval执行代码中的最后一个语句的值:


#-------------------------------------------------------Demo---------------------------------------------------


print "\n-------------------Compute  print_Hello---------------------------------\n";


eval "print \"Hello\n\"";


print "\n-------------------End Compute print_Hello------------------------------\n";




#exit语句结束来结束终止程序:


#exit EXPR;


#PS:上面语句返回EXPR(如果指定的话),作为程序的退出码(可以将EXPR设置为0代表成功,为1代表有某种错误,它们是唯一的普遍承认的设置)。如果省略EXPR,则exit返回0。


#---------------------------------------Demo-----------------------------------------------


# print "\n------------------------EXIT START----------------------------\n";


# while(<>){


# chop;


# if($_ eq 'y'){


 # print "Please type the letter y\n";


# }else{


# print "Do you always do what you're told?\n";}


# exit;


# }




# print "\n------------------------End EXIT------------------------------\n";




#die函数在结束程序时显示错误消息,工作方式:


#die LIST;


#这个函数将LIST值打印到STDERR且终止程序,返回Perl特殊变量$!的当前值。在eval语句中,错误消息放在特殊变量$@中,然后eval语句结束。


#下面一个例子:试图打开一个不存在的文件(在perl中,将看到die语句几乎一成不变的连接在open语句末端):


print "\n---------------------------die Demo----------------------------------------\n";


die "Cannot open filename\n";