Provided by: manpages-zh_1.5-1_all bug

NAME

       a2p - Awk 到 Perl 芬肫

 (SYNOPSIS)
       a2p [options] filename

 (DESCRIPTION)
       A2p 从命令行或标准输入取得一个awk脚本文件,
       并且向标准输出产生一个相同功能的 perl 脚本文件。

        (OPTIONS)

       可选选项有:

       -D<number>
            设置调试标记。

       -F<character>
            告诉a2p,awk脚本总是带 -F 选项执行。

       -n<fieldlist>
            如果输入不分解为一个数组,你需要指定输入的各字段的名称。 假如要-
            译一个用于处理密码文件的awk脚本,你应当这样:

                    a2p -7 -nlogin.password.uid.gid.gcos.shell.home

            任何定界符都可以用来分隔字段名。

       -<number>
            使得a2p总是假设输入包含那么多字段。

       -o   告诉a2p使用旧的awk行为。当前,唯一的区别是旧的awk总是有一个
            每行的鸦罚词姑挥卸悦啃械牟僮鳎恍碌腶wk不是这样。

       ""Considerations""

       a2p 不能芬氲孟袢艘谎茫峭ǔ6甲龅煤芎谩
       在生成的perl脚本中,你应当检查和修改一些东西。这里是
       其中的一些,没有顺序。

       awk 中有一个习惯,就是将一个字符串表达式放在 int() 函数中
       来使它强制解释为数字,即使参数已臼且桓鍪帧 这在perl
       中是不必要的,但是a2p不知道参数是不是一个数字,所以它
       将它直译了。你也许想删掉它。

       perl 中数字比较和字符比较是不一样的。对这两种情况,awk只有一个操作符,
       但是会在运行时判断是哪一种。在这一点上a2p不对awk进行彻底的模拟。
       它会猜测哪一种是你想要的。大多数时候它是对的,但是不能保证。
       这样的猜测都以 "#???" 注释来标记。你应当 仔细检查它们,至少用perl的 -w
       选项来运行它们一次,这样 perl会警告你在应当使用eq 的地方使用了==。

       perl 不会像awk一样将不存在的数组元素创建为引用。如果你想用这种办法
       来在一个for...in 鸦分写唇赵兀趐erl中将不可能实现。

       如果a2p产生了一个分段的行,用来将一列变量赋值,看上去就 像这样 (Fld1,
       Fld2, Fld3...) ,你应当重新用上面提到的 -n 选项
       运行a2p。这样可以让你命名字段。
       如果它又将行分解为一个数组,那么这个脚本中其他地方可能引用了字段的数量。

       awk中的exit语句不会退出。如果有 END 段,它会转到那里。 在 END
       段中执行跳过其他程序,转向退出的awk脚本段落在perl
       中没有必要。你只要删掉 END 块中的条件变量,直接退出就可以了。

       perl 中有两种数组,数字下标的和关联数组。perl中的关联数组叫做 散列
       "hashes"。awk中的数组总是芬胛⒘校侨绻阒
       索引总是数字,你就可以将 {...} 转为 [...]。对散列的遍历用到了 keys()
       函数,但是对数组的散列不会。你需要修改对这样的数组进行遍历 的鸦贰

       awk 默认 OFMT 的值是 %.6g,perl默认作用相同的成分 $# 的值是
       %.20g。如果你想使用 OFMT 的默认值,你需要 显式地定义$#。

       在鸦范ゲ孔苁腔岢鱿址种Р僮鳎馐莂wk脚本中暗含的。很多时候
       你可以将对整个记录的判断移到鸦废旅妫庋梢约跎俸芏喾种卸稀

       出于美学砸颍阋残硐虢榈钠鹗贾 $[ 从1转为perl默认的0
       但是要记住将所有数组的下标 AND 和 substr() 还有 index()
       函数都进行更改,保证正确。

       a2p会聪明地在在未处理的脚本中添加注释 "# Here is a workaround because
       awk is dumb"

       awk脚本境J褂迷趕hell脚本中,通过管道接受和输出文本。
       大部分时候这种shell脚本“wrapper” 可以和perl合并,
       因为perl可以建立输入输出管道,做其他awk不能做的事情。

       对RSTART 和 RLENGTH 变量进行引用的脚本可以简单地 修改为对变量$`, $& 和
       $' 的引用,只要他们是在模式匹配的范围之内。

       产生的perl脚本可能含有子程序来处理awk的getline和print函数。由于
       a2p通常将正确性放在首位而不是效率,一般可以将子程序重写得更有效率。

       为了提高效率,你可以将子程序中的return去掉,只要返回值是子程序中的
       最后一个语句。a2p可以处理最简单的情况,但是不能分析嵌入程序块的情况。

       ARGV[0] 芬胛 $ARGV0, 但是 ARGV[n] 会芬胛 $ARGV[$n]。 遍历 ARGV[0]
       的鸦方也坏剿

 (ENVIRONMENT)
       a2p不使用环境变量

 (AUTHORS)
       Larry Wall <larry@wall.org>

 (FILE)
 (SEE ALSO)
        perl   perl 编译器和解释器

        s2p    sed 到 perl的芬牍ぞ

 (DIAGNOSTICS)

BUGS

       可以在运行时根据操作数来选择字符还是数字操作,从而模拟awk。
       但是这样非常粗野并且无效率。另外,a2p通常都能猜对。

       当前,awk语法树是静态存储的,空间可能会耗尽。

[]
       袁乙钧 <bbbush@163.com>

[]
       2003/10/25

Linuxman
       http://cmpp.linuxforum.net