zoukankan      html  css  js  c++  java
  • 简短的perl程序


      简短的perl程序能够实现大功能。
     
      perl是如何做到的呢?
      1. 默认变量
         如果没有向函数提供参数值,则默认参数为$_;
         如果没有变量用于接收一个表达式的值,则默认接收变量为$_。
         perl语言每条语句可像管道那样运行,通过默认变量$_串接起来。
      2. 特殊语法
         利用一些正常情况下没有含义的语法,如while(<>){}.
         如果按照正常的语法,这个定法的意义是:读取一行文本,然后丢弃。
         由于正常情况下没有人会这么用,perl语言将这一语法利用起来了。在实际中写起来非常方便。
      3. 变量值不用给定初值,不用提前声明
         perl会自动为变量选择合适的初值,如果没有给定的话。
         对于数值,初值为0;对于字符串,初值为““,也就是空字符串。
      4. 对于一些常用语法的简洁写法
         如通过qw定义一个字符串list,可避免写引号。
         
      简短的好处?
      简短,再加上perl与shell结合非常好,可以在命令行上直接写出简短又功能强大的代码。
      一个常用用法:

    find . |perl -e 'while(<>){...}'
    

       处理标准输入的每一行文本。'...'表示每行的处理代码。

      通过动态声明一个函数,省略while,只提供每行的处理代码,可以进一步节省字节。
      process_each_line.pl

      #!/usr/bin/perl
      my $cmd=$ARGV[0];
      my $func = eval "sub{while(<STDIN>){chomp;$cmd;}}";
      die "unable to compile '$cmd', aborting...
    " if not defined $func;
      $func->();
    

       命令行调用

      find . |./process_each_line.pl 'print if /pl$/'
    

        打印出当前目录下所有以pl结尾的文件名。
      process_each_line.pl 会生成一个函数 sub{while (<STDIN>){chomp; print if /pl$/;}}(第3行),然后再调用这个函数(最后一行)。
      可继续扩充这个文件,加入一些常用函数,供在命令行上直接调用。


  • 相关阅读:
    quart源码阅读(一)
    Python poll IO多路复用
    Python select IO多路复用
    谁才是真正的垃圾:判断对象的可触及性
    Java的四种引用之强弱软虚
    JVM的基本结构及其各部分详解(二)
    JVM的基本结构及其各部分详解(一)
    java面试笔试题收集
    看懂Class文件的装载流程
    java单例模式
  • 原文地址:https://www.cnblogs.com/astropeak/p/5374564.html
Copyright © 2011-2022 走看看