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

NAME

       a2p - Awk 到 Perl 翻譯器

` (SYNOPSIS)
       a2p [options] filename

yz (DESCRIPTION)
       A2p 從命令行或標準輸入取得一羖wk稿本檔案, 並且向標準輸出產生一-
       茯萓P弁鄋 perl 稿本檔案。

 (OPTIONS)
       可選選項有:

       -D<number>
            設置調試標記。

       -F<character>
            告訴a2p,awk稿本總是帶 -F 選項執行。

       -n<fieldlist>
            如果輸入不分解為一蚍捸A你需n指定輸入的各字段的名稱。 假如-
            n翻譯一茈峏馧B理密碼檔案的awk稿本,你應當這樣:

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

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

       -<number>
            使得a2p總是假設輸入包含那麼多字段。

       -o   告訴a2p使用舊的awk行為。當前,唯一的區別是舊的awk總是有一
            每行的循環,即使沒有對每行的操作;新的awk不是這樣。

   Considerations
       a2p 不能翻譯得像人一樣好,但是通常都做得很好。
       在生成的perl稿本中,你應當檢查和蚹鴾@些東西。這裏是
       其中的一些,沒有順序。

       awk 中有一茞葴D,就是將一茼r符串表達式放在 int() 函數中
       來使它強制解釋為數字,即使參數已經是一蚍r。 這在perl 中是不必-
       n的,但是a2p不知道參數是不是一蚍r,所以它 將它直譯了。你也雪Q刪掉它。

       perl 中數字比較和字符比較是不一樣的。對這兩種情況,awk只有一蚞犑@符,
       但是會在運行時判斷是一種。在這一點上a2p不對awk進行徹底的模擬。
       它會猜測一種是你想n的。大多數時唹收O對的,但是不能保証。
       這樣的猜測都以 ""#???"" 注釋來標記。你應當 仔細檢查它怴A至少用perl的 -w
       選項來運行它怳@次,這樣 perl會警告你在應當使用eq 的地方使用了==。

       perl 不會像awk一樣將不存在的數組元素創建為引用。如果你想用這種辦法
       來在一耖or...in 循環中創建空元素,在perl中將不可能實現。

       如果a2p產生了一茪嶼q的行,用來將一列變量賦A看上去就 像這樣 (Fld1,
       Fld2, Fld3...) ,你應當奐s用上探ㄗ鴘 -n 選項
       運行a2p。這樣可以讓你命名字段。 如果它又將行分解為一蚍捸A那麼這-
       蚑Z本中其他地方可能引用了字段的數量。

       awk中的exit語句不會退出。如果有 END 段,它會轉到那裏。 在 END
       段中執行跳過其他程式,轉向退出的awk稿本段落在perl 中沒有必n。你只n刪掉
       END 塊中的條件變量,直接退出就可以了。

       perl 中有兩種數組,數字下標的和關聯數組。perl中的關聯數組叫做 散列
       "hashes"。awk中的數組總是翻譯為散列,但是如果你知道
       索引總是數字,你就可以將 {...} 轉為 [...]。對散列的遍歷用到了 keys()
       函數,但是對數組的散列不會。你需n蚹儮鼣o樣的數組進行遍歷 的循環。

       awk 預設 OFMT 的O %.6g,perl預設作用相同的成分 $# 的O
       %.20g。如果你想使用 OFMT 的預設A你需n 顯式地定義$#。

       在循環頂部總是會出現分支操作,這是awk稿本中暗含的。很多時
       你可以將對整荌O錄的判斷移到循環下情A這樣可以減少很多分支判斷。

       出於美學鴞],你也雪Q將數組的起始 $[ 從1轉為perl預設的0 但是-
       n記住將所有數組的下標 AND 和 substr() 還有 index()
       函數都進行更改,保証正確。

       a2p會聰明地在在未處理的稿本中添加注釋 "# Here is a workaround because
       awk is dumb"

       awk稿本經常使用在shell稿本中,通過管道接受和輸出文本。 大部分時-
       堀o種shell稿本"wrapper"可以和perl合並,
       因為perl可以建立輸入輸出管道,做其他awk不能做的事情。

       對RSTART 和 RLENGTH 變量進行引用的稿本可以簡單地 蚹麍偎幭僆q$`, $& 和
       $' 的引用,只n他怓O在模式匹配的S圍之內。

       產生的perl稿本可能含有子程式來處理awk的getline和print函數。由於
       a2p通常將正確性放在漲鴞茪ㄛO效率,一般可以將子程式姨g得更有效率。

       為了提高效率,你可以將子程式中的return去掉,只n返回O子程式中的
       最後一蚖y句。a2p可以處理最簡單的情況,但是不能分析嵌入程式塊的情況。

       ARGV[0] 翻譯為 $ARGV0, 但是 ARGV[n] 會翻譯為 $ARGV[$n]。 遍歷 ARGV[0]
       的循環將找不到它。

 (ENVIRONMENT)
       a2p不使用環境變量

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

 (FILE)
t (SEE ALSO)
       perl   perl 編譯器和解釋器

       s2p    sed 到 perl的翻譯工具

E_ (DIAGNOSTICS)

BUGS

       可以在運行時根據操作數來選擇字符還是數字操作,從而模擬awk。
       但是這樣非常粗野並且無效率。另外,a2p通常都能猜對。

       當前,awk語法樹是靜態存儲的,空間可能會耗盡。

[@H]
       袁乙鈞 <bbbush@163.com>

[ss]
       2003/10/25

mLinuxmanUp滿n
       http://cmpp.linuxforum.net