I am LAZY bones? AN ancient AND boring SITE

2010年 02月 12日 的归档

a2p──将awk程序转成perl

呵呵,不管你觉得有没有必要,反正,就是有这样的工具了,而且还是perl包自带的哦(看来perl确实有点怪异,哈哈)。
别的不说了,拿个小程序演示下,下面的awk程序是用来统计当前登录系统的人数的,其实就是 who | wc -l

BEGIN { 
while ( "who" | getline ) n++ 
print n 
}

然后这样:

lily@LLY:~/test/awk$ awk -f count.awk
3
lily@LLY:~/test/awk$ a2p count.awk > count.pl 
lily@LLY:~/test/awk$ perl count.pl
3

哈哈,确实能执行哦,再让我们来看看转出来的perl程序,格式都还蛮工整的呢:

#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
    if $running_under_some_shell;
			# this emulates #! processing on NIH machines.
			# (remove #! line above if indigestible)
 
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
			# process any FOO=bar switches
 
open(WHO_FH, 'who|') || die 'Cannot pipe from "who".';
 
$, = ' ';		# set output field separator
$\ = "\n";		# set output record separator
 
while (($_ = &Getline2('WHO_FH', '|'),$getline_ok)) {
    $n++;
}
print $n;
 
sub Getline2 {
    ($fh) = @_;
    if ($getline_ok = (($_ = <$fh>) ne '')) {
	;
    }
    $_;
}

想学perl的同学可以折腾折腾。