ready to 1.5.1-rc2
[manpages-zh.git] / src / man1 / a2p.1
blob89b7802961ab0a48dc1efe544e94c50f00f12080
1 .TH A2P 1 "perl 5.005, patch 03" "29/Jul/1998" "Perl Programmers Reference Guide"
2 .UC
3 .if n .hy 0
4 .if n .na
5 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
6 .de CQ          \" put $1 in typewriter font
7 .ft CW
8 'if n "\c
9 'if t \\&\\$1\c
10 'if n \\&\\$1\c
11 'if n \&"
12 \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
13 '.ft R
15 .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
16 .       \" AM - accent mark definitions
17 .bd B 3
18 .       \" fudge factors for nroff and troff
19 .if n \{\
20 .       ds #H 0
21 .       ds #V .8m
22 .       ds #F .3m
23 .       ds #[ \f1
24 .       ds #] \fP
25 .\}
26 .if t \{\
27 .       ds #H ((1u-(\\\\n(.fu%2u))*.13m)
28 .       ds #V .6m
29 .       ds #F 0
30 .       ds #[ \&
31 .       ds #] \&
32 .\}
33 .       \" simple accents for nroff and troff
34 .if n \{\
35 .       ds ' \&
36 .       ds ` \&
37 .       ds ^ \&
38 .       ds , \&
39 .       ds ~ ~
40 .       ds ? ?
41 .       ds ! !
42 .       ds /
43 .       ds q
44 .\}
45 .if t \{\
46 .       ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
47 .       ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
48 .       ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
49 .       ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
50 .       ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
51 .       ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
52 .       ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
53 .       ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
54 .       ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
55 .\}
56 .       \" troff and (daisy-wheel) nroff accents
57 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
58 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
59 .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
60 .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
61 .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
62 .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
63 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
64 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
65 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
66 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
67 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
68 .ds ae a\h'-(\w'a'u*4/10)'e
69 .ds Ae A\h'-(\w'A'u*4/10)'E
70 .ds oe o\h'-(\w'o'u*4/10)'e
71 .ds Oe O\h'-(\w'O'u*4/10)'E
72 .       \" corrections for vroff
73 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
74 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
75 .       \" for low resolution devices (crt and lpr)
76 .if \n(.H>23 .if \n(.V>19 \
77 \{\
78 .       ds : e
79 .       ds 8 ss
80 .       ds v \h'-1'\o'\(aa\(ga'
81 .       ds _ \h'-1'^
82 .       ds . \h'-1'.
83 .       ds 3 3
84 .       ds o a
85 .       ds d- d\h'-1'\(ga
86 .       ds D- D\h'-1'\(hy
87 .       ds th \o'bp'
88 .       ds Th \o'LP'
89 .       ds ae ae
90 .       ds Ae AE
91 .       ds oe oe
92 .       ds Oe OE
93 .\}
94 .rm #[ #] #H #V #F C
95 .SH NAME
96 a2p \- Awk 到 Perl 翻译器
97 .SH "总览 (SYNOPSIS)"
98 \fBa2p [options] filename\fR
99 .SH "描述 (DESCRIPTION)"
100 \fIA2p\fR 从命令行或标准输入取得一个awk脚本文件,
101 并且向标准输出产生一个相同功能的 \fIperl\fR 脚本文件。
102 .SH "选项 (OPTIONS)"
103 可选选项有:
104 .IP "\fB\-D<number>\fR" 5
105 设置调试标记。
106 .IP "\fB\-F<character>\fR" 5
107 告诉a2p,awk脚本总是带 \fB\-F\fR 选项执行。
108 .IP "\fB\-n<fieldlist>\fR" 5
109 如果输入不分解为一个数组,你需要指定输入的各字段的名称。
110 假如要翻译一个用于处理密码文件的awk脚本,你应当这样:
112 a2p -7 -nlogin.password.uid.gid.gcos.shell.home
114 任何定界符都可以用来分隔字段名。
115 .IP "\fB\-<number>\fR" 5
116 使得a2p总是假设输入包含那么多字段。
117 .IP "\fB\-o\fR" 5
118 告诉a2p使用旧的awk行为。当前,唯一的区别是旧的awk总是有一个
119 每行的循环,即使没有对每行的操作;新的awk不是这样。
120 .SS "Considerations"
121 a2p 不能翻译得像人一样好,但是通常都做得很好。
122 在生成的perl脚本中,你应当检查和修改一些东西。这里是
123 其中的一些,没有顺序。
125 awk 中有一个习惯,就是将一个字符串表达式放在 \fIint()\fR 函数中
126 来使它强制解释为数字,即使参数已经是一个数字。
127 这在perl 中是不必要的,但是a2p不知道参数是不是一个数字,所以它
128 将它直译了。你也许想删掉它。
130 perl 中数字比较和字符比较是不一样的。对这两种情况,awk只有一个操作符,
131 但是会在运行时判断是哪一种。在这一点上a2p不对awk进行彻底的模拟。
132 它会猜测哪一种是你想要的。大多数时候它是对的,但是不能保证。
133 这样的猜测都以 ""#???"" 注释来标记。你应当
134 仔细检查它们,至少用perl的 \fB\-w\fR 选项来运行它们一次,这样
135 perl会警告你在应当使用eq 的地方使用了==。
137 perl 不会像awk一样将不存在的数组元素创建为引用。如果你想用这种办法
138 来在一个for...in 循环中创建空元素,在perl中将不可能实现。
140 如果a2p产生了一个分段的行,用来将一列变量赋值,看上去就
141 像这样 (Fld1, Fld2, Fld3...) ,你应当重新用上面提到的 \fB\-n\fR 选项
142 运行a2p。这样可以让你命名字段。
143 如果它又将行分解为一个数组,那么这个脚本中其他地方可能引用了字段的数量。
145 awk中的exit语句不会退出。如果有 \s-1END\s0 段,它会转到那里。
146 在 \s-1END\s0 段中执行跳过其他程序,转向退出的awk脚本段落在perl 
147 中没有必要。你只要删掉 \s-1END\s0 块中的条件变量,直接退出就可以了。
149 perl 中有两种数组,数字下标的和关联数组。perl中的关联数组叫做
150 散列 "hashes"。awk中的数组总是翻译为散列,但是如果你知道
151 索引总是数字,你就可以将 {...} 转为 [...]。对散列的遍历用到了
152 \fIkeys()\fR 函数,但是对数组的散列不会。你需要修改对这样的数组进行遍历
153 的循环。
155 awk 默认 \s-1OFMT\s0 的值是 %.6g,perl默认作用相同的成分
156 $# 的值是 %.20g。如果你想使用 \s-1OFMT\s0 的默认值,你需要
157 显式地定义$#。
159 在循环顶部总是会出现分支操作,这是awk脚本中暗含的。很多时候
160 你可以将对整个记录的判断移到循环下面,这样可以减少很多分支判断。
162 出于美学原因,你也许想将数组的起始值 $[ 从1转为perl默认的0
163 但是要记住将所有数组的下标 \s-1AND\s0 和 \fIsubstr()\fR 还有 \fIindex()\fR
164 函数都进行更改,保证正确。
166 a2p会聪明地在在未处理的脚本中添加注释
167 "# Here is a workaround because awk is dumb"
169 awk脚本经常使用在shell脚本中,通过管道接受和输出文本。
170 大部分时候这种shell脚本"wrapper"可以和perl合并,
171 因为perl可以建立输入输出管道,做其他awk不能做的事情。
173 对\s-1RSTART\s0 和 \s-1RLENGTH\s0 变量进行引用的脚本可以简单地
174 修改为对变量$\`, $& 和 $\' 的引用,只要他们是在模式匹配的范围之内。
176 产生的perl脚本可能含有子程序来处理awk的getline和print函数。由于
177 a2p通常将正确性放在首位而不是效率,一般可以将子程序重写得更有效率。
179 为了提高效率,你可以将子程序中的return去掉,只要返回值是子程序中的
180 最后一个语句。a2p可以处理最简单的情况,但是不能分析嵌入程序块的情况。
182 \s-1ARGV\s0[0] 翻译为 \f(CW$ARGV0\fR,
183 但是 \s-1ARGV\s0[n] 会翻译为 \f(CW$ARGV\fR[$n]。
184 遍历 \s-1ARGV\s0[0] 的循环将找不到它。
185 .SH "环境 (ENVIRONMENT)"
186 a2p不使用环境变量
187 .SH "作者 (AUTHORS)"
188 Larry Wall <\fIlarry@wall.org\fR>
189 .SH "文件 (FILE)"
190 .SH "另见 (SEE ALSO)"
192 perl   perl 编译器和解释器
194 s2p    sed 到 perl的翻译工具
195 .SH "诊断 (DIAGNOSTICS)"
196 .SH "BUGS"
197 可以在运行时根据操作数来选择字符还是数字操作,从而模拟awk。
198 但是这样非常粗野并且无效率。另外,a2p通常都能猜对。
200 当前,awk语法树是静态存储的,空间可能会耗尽。
201 .SH "[中文版维护人]"
202 袁乙钧 <bbbush@163.com>
203 .SH "[中文版最新更新]"
204 .BR 2003/10/25
205 .SH "《中国Linux论坛man手册页翻译计划》" 
206 http://cmpp.linuxforum.net