[julia@oc2365548284 backup]$ more example.perl
#!/usr/bin/perl
open (F,"+<t.txt");
#以读写方式打开文件,t.txt
#F是文件句柄:perl是以文件句柄来识别文件的,open()函数用来打开文件,+<表示以读写的方式打开文件。
@a=<F>;
print @a;
open (H,"+<text");
while($line=<H>){if(eof){print "end of file\n"}}; #一行一行的读文件,如果文件读完,就输出end of file到标准输出,
#print H ("写文件到文件句柄"); #把str写到了H文件里了 。文件写入操作。
print tell(H);#可以查读了多少个字节。
print "\n";
###seek 从哪里开始读,seek(F,distance,pos) ,pos=0 相对于文件头的位置,1当前位置,2文件尾。distance相对位置。
seek(H,3,0); #相对于文件头部,第3个距离开始读出这一行,空格不算在内。
$b=<H>; #把读到的输出给变量b,为什么是变量不是数组,可能是要一行吧。
print "line 2 :$b"; #把这一样打印出来。
#print F "a".$/;
close(F); #文件打开以后要关闭,才能释放缓存。
close(H);
$c='funny.txt';
if (-e "$c"){print"$c is exist"}else{print STDERR ("file does not exsit\n");} #判断文件是否存在
#正则表达式用法,一般用在条件判断里面
$question=quespleaseding;
if ($question=~/please/){print "Thank you for being polite!\n"}
else{print "That was not very polit!\n";};
#子程序又叫用户函数 ,perl里面有系统函数和用户函数,用户函数又称为子程序。
#用户函数定义
#sub 用户函数名字{
# 语句块;
# }
#
sub say_hello { ##定义一个子函数,以sub开头。
print "你好,欢迎dear";
}
&say_hello; #函数调用,要在定义的用户函数前加&
print "\n";
#do say_hello; #前面加 do 调用函数不起作用
say_hello(); #子函数后加()调用函数好用; 加(),要求该子函数在这之前已经被定义。
print "\n";
#----------
sub params
{
print 'the values in the @_array are ',"@_\n";#将打印整个数组
print "the first value is $_[0]\n";
print "the last value is ",pop(@_),"\n";#最后一个参数被弹出@_数组,最后一个参数已经被踢出数组@_,但是原来的数组@n里面的参数实际个数是没#有变化的
foreach $value (@_)
{
$value+=5;
print "The value is $value","\n";
}
}
@n=(1,2,3,4,5);#定义数组。
params(@n); #带参数的子函数的调用。
print "black in main\n";
print "the new values are @n \n";
#-----------shift比较常用------------
#这个函数把数组的第一个值移出来并且返回它,然后数组长度减一并且把所有的东西顺移。如果数组中不在存在元素,它返回undef.
#-------------------
sub test_sum
{
my($first_num,$second_num);
return $first_num+$second_num;##此时传入的值是保存在@_中的,看下面的解释。
}
$first=1;
$second=2;
$ret=&test_sum($first,$second);#传递的参数值会默认的存储在perl的默认全局变量中@_中。
print "ret:$ret\n";
#--------------------my 定义的变量和local定义的变量的区别-------------------------------------------
sub spoof
{
my $value="temporary"; ##定义的是局部变量,所以在这个子函数中调用另一个子函数tellme时$values是没有值的。
tellme();
}
sub tellme{
print "Current value is $value\n";
}
#此时调用spoof变量不会有值输出的,因为my变量不会出现的子函数调用的函数中的。
#---------------------------
sub spoof
{
my $myvalue="my_temporay";
local $value="local_temporary"; ##定义的也是局部变量,但是区别在于这个子函数中调用另一个子函数tellme时$values是有值的,local的变量可以继续在这个block中
调用的子程序中存在。
tellme();
}
sub tellme{
print "Current my deined value is $myvalue\n";
print "Current local defind value is $value\n";
}
spoof();##这是会输出local_temporay。
#-------返回值-----------
#多个标量的返回
#Function definition.
sub get_value()
{
my ($var_a, $var_b);
$var_a = 1;
$var_b =2;
return($var_a, $var_b); #返回值
}
########## Main script
my ($result_a, $result_b);
($result_a, $result_b) = get_value();#调用子函数get_value(),得到的返回值赋值给定义的两个变量,返回两个值。
print"\$result_a = $result_a\n\$result_b = $result_b\n";
#--------------------引用/or 指针-----------------
$value=10;
$pointer=\$value;## "\"符号表示引用这个变量的地址,\$value把这个变量的地址赋值给$pointer。
print "\nPointer Adress $pointer of $value\n";
print "\nWhat Pointer *($pointer) points to $$pointer\n";
##可以看出$pointer给出地址,$$pointer给出$variable的值。
@ARGV=(1,2,3,4,5,6);
$pointer=\@ARGV;
print $pointer;
print "\n------Pointer Address of ARGV=$pointer\n";
print "\n-------The values the pointer point to @$pointer\n";
$i=scalar(@$pointer);#调用函数scalar()获取数组的元素个数
$h=@ARGV;#可以使用@数组名字,来计算数组长度。如果用指针必须用@$pointer的形式指定其类型为数组,$pointer给出地址,@符号说明传递
#的地址为数组的第一个元素的地址。
print "i is $i\n h is $h\n";
for ($i=0;$i<@$pointer;$i++){
print "$i:$$pointer[$i];\n"; ##使用$$pointer[$i]列出所有元素。
}
#给hash赋值=>,
my %hash = ("a"=>1,"b"=>2,"c"=>3);
print my @k=keys%hash; #keys函数将返回此hash的所有的keys,values函数将返回所有的values.如果hash中没有元素,则刺函数将返回空列表。
print "\n";
print my @v=values%hash;
print "\n";
#!/usr/bin/perl
open (F,"+<t.txt");
#以读写方式打开文件,t.txt
#F是文件句柄:perl是以文件句柄来识别文件的,open()函数用来打开文件,+<表示以读写的方式打开文件。
@a=<F>;
print @a;
open (H,"+<text");
while($line=<H>){if(eof){print "end of file\n"}}; #一行一行的读文件,如果文件读完,就输出end of file到标准输出,
#print H ("写文件到文件句柄"); #把str写到了H文件里了 。文件写入操作。
print tell(H);#可以查读了多少个字节。
print "\n";
###seek 从哪里开始读,seek(F,distance,pos) ,pos=0 相对于文件头的位置,1当前位置,2文件尾。distance相对位置。
seek(H,3,0); #相对于文件头部,第3个距离开始读出这一行,空格不算在内。
$b=<H>; #把读到的输出给变量b,为什么是变量不是数组,可能是要一行吧。
print "line 2 :$b"; #把这一样打印出来。
#print F "a".$/;
close(F); #文件打开以后要关闭,才能释放缓存。
close(H);
$c='funny.txt';
if (-e "$c"){print"$c is exist"}else{print STDERR ("file does not exsit\n");} #判断文件是否存在
#正则表达式用法,一般用在条件判断里面
$question=quespleaseding;
if ($question=~/please/){print "Thank you for being polite!\n"}
else{print "That was not very polit!\n";};
#子程序又叫用户函数 ,perl里面有系统函数和用户函数,用户函数又称为子程序。
#用户函数定义
#sub 用户函数名字{
# 语句块;
# }
#
sub say_hello { ##定义一个子函数,以sub开头。
print "你好,欢迎dear";
}
&say_hello; #函数调用,要在定义的用户函数前加&
print "\n";
#do say_hello; #前面加 do 调用函数不起作用
say_hello(); #子函数后加()调用函数好用; 加(),要求该子函数在这之前已经被定义。
print "\n";
#----------
sub params
{
print 'the values in the @_array are ',"@_\n";#将打印整个数组
print "the first value is $_[0]\n";
print "the last value is ",pop(@_),"\n";#最后一个参数被弹出@_数组,最后一个参数已经被踢出数组@_,但是原来的数组@n里面的参数实际个数是没#有变化的
foreach $value (@_)
{
$value+=5;
print "The value is $value","\n";
}
}
@n=(1,2,3,4,5);#定义数组。
params(@n); #带参数的子函数的调用。
print "black in main\n";
print "the new values are @n \n";
#-----------shift比较常用------------
#这个函数把数组的第一个值移出来并且返回它,然后数组长度减一并且把所有的东西顺移。如果数组中不在存在元素,它返回undef.
#-------------------
sub test_sum
{
my($first_num,$second_num);
return $first_num+$second_num;##此时传入的值是保存在@_中的,看下面的解释。
}
$first=1;
$second=2;
$ret=&test_sum($first,$second);#传递的参数值会默认的存储在perl的默认全局变量中@_中。
print "ret:$ret\n";
#--------------------my 定义的变量和local定义的变量的区别-------------------------------------------
sub spoof
{
my $value="temporary"; ##定义的是局部变量,所以在这个子函数中调用另一个子函数tellme时$values是没有值的。
tellme();
}
sub tellme{
print "Current value is $value\n";
}
#此时调用spoof变量不会有值输出的,因为my变量不会出现的子函数调用的函数中的。
#---------------------------
sub spoof
{
my $myvalue="my_temporay";
local $value="local_temporary"; ##定义的也是局部变量,但是区别在于这个子函数中调用另一个子函数tellme时$values是有值的,local的变量可以继续在这个block中
调用的子程序中存在。
tellme();
}
sub tellme{
print "Current my deined value is $myvalue\n";
print "Current local defind value is $value\n";
}
spoof();##这是会输出local_temporay。
#-------返回值-----------
#多个标量的返回
#Function definition.
sub get_value()
{
my ($var_a, $var_b);
$var_a = 1;
$var_b =2;
return($var_a, $var_b); #返回值
}
########## Main script
my ($result_a, $result_b);
($result_a, $result_b) = get_value();#调用子函数get_value(),得到的返回值赋值给定义的两个变量,返回两个值。
print"\$result_a = $result_a\n\$result_b = $result_b\n";
#--------------------引用/or 指针-----------------
$value=10;
$pointer=\$value;## "\"符号表示引用这个变量的地址,\$value把这个变量的地址赋值给$pointer。
print "\nPointer Adress $pointer of $value\n";
print "\nWhat Pointer *($pointer) points to $$pointer\n";
##可以看出$pointer给出地址,$$pointer给出$variable的值。
@ARGV=(1,2,3,4,5,6);
$pointer=\@ARGV;
print $pointer;
print "\n------Pointer Address of ARGV=$pointer\n";
print "\n-------The values the pointer point to @$pointer\n";
$i=scalar(@$pointer);#调用函数scalar()获取数组的元素个数
$h=@ARGV;#可以使用@数组名字,来计算数组长度。如果用指针必须用@$pointer的形式指定其类型为数组,$pointer给出地址,@符号说明传递
#的地址为数组的第一个元素的地址。
print "i is $i\n h is $h\n";
for ($i=0;$i<@$pointer;$i++){
print "$i:$$pointer[$i];\n"; ##使用$$pointer[$i]列出所有元素。
}
#给hash赋值=>,
my %hash = ("a"=>1,"b"=>2,"c"=>3);
print my @k=keys%hash; #keys函数将返回此hash的所有的keys,values函数将返回所有的values.如果hash中没有元素,则刺函数将返回空列表。
print "\n";
print my @v=values%hash;
print "\n";