Provided by: manpages-zh_1.5.2-1.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總是有一個 每行的循環,即使沒有對每
            行的操作;新的awk不是這樣。

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

       awk 中有一個習慣,就是將一個字符串表達式放在 int() 函數中 來使它強制解釋為數字,即使參數已
       經是一個數字。 這在perl 中是不必要的,但是a2p不知道參數是不是一個數字,所以它 將它直譯
       了。你也許想刪掉它。

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

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

       如果a2p產生了一個分段的行,用來將一列變量賦值,看上去就 像這樣 (Fld1, Fld2, Fld3...) ,你
       應當重新用上面提到的 -n 選項 運行a2p。這樣可以讓你命名字段。 如果它又將行分解為一個數
       組,那麼這個稿本中其他地方可能引用了字段的數量。

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

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

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

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

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

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

       awk稿本經常使用在shell稿本中,通過管道接受和輸出文本。 大部分時候這種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

《《中中國國Linux論論壇壇man手手冊冊頁頁翻翻譯譯計計劃劃》》

       http://cmpp.linuxforum.net