简短的perl程序

2022-05-11 10:48:56 浏览数 (1)

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

代码语言:javascript复制
find . |perl -e 'while(<>){...}'

   处理标准输入的每一行文本。'...'表示每行的处理代码。   通过动态声明一个函数,省略while,只提供每行的处理代码,可以进一步节省字节。   process_each_line.pl

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

   命令行调用

代码语言:javascript复制
find . |./process_each_line.pl 'print if /pl$/'

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

0 人点赞