Perl example

[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";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值