看板 Perl 關於我們 聯絡資訊
因為手邊沒有書..所以使用的符號可能不對..請見諒 問題一 假如我有一文件..想要列出所有以數字開頭的列.. 並且將所有的數字都整理成三位數..如果是1..就改成001..若是11..改為011 if( m/^(\d+)/ ){ if ( length($1) == 1) { $1 = "00"."$1" ; } if ( length($1) == 2) { $1 = "0"."$1" ;} } 可是我這樣寫的話反而一位數和二位數的都會不見..而且會有error訊息 問題二 如果我想將圓括號找到的值交由副常式再處理.. if( m/(符合條件的行列)){ $num = &hex($1); } sub hex{ #想要再這裡將$1再做一次記憶圓括號的篩選 if ( m/(再進行一次條件篩選)/ ){ return $1 ; } } 但這樣就出現問題..副常式回傳的仍是第一次圓括號找出來的值.. 有什麼方式可以使副常式回傳的是第二次篩選出來的值啊?? 問題三 我常會將perl當普通指令來改檔案..perl -pi -e 's/.../.../g' 檔案 也常會用到記憶圓括號.. 但一直有個問題解決不了.. 若我要篩出以數字結尾的行列..並將最末端的數字都改成0.. perl -pi -e 's/(.*)\d/$10/g' 檔案 可是就出問題了..因為系統會判成將找到的行列改為第10個記憶圓括號的值.. 而不是我要的..將找到的行列改為第一個記憶圓括號的值再接個0.. 如果是寫成程式就好解決了.. print "$1"."0\n"; 但因為我是用一行指令..就對它束手無策了.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.169.72 ※ 編輯: RueyJing 來自: 123.195.169.72 (12/30 12:18)
paulpu:用兩行不就? 12/30 13:48
paulpu:$1是暫時的scalar應該不是原本地方的指標吧 12/30 13:57
因為常常要修改很多檔案..直接用指令快很多.. 而且..重點不是一行或二行.. 是我想知道$1後接個數字到底要怎樣寫.. 因為常會用到..每次都要另想方法避開很麻煩
snowfly:if ( m/^(\d+)/ ) { $number = sprintf("%3d",$1); } 12/30 21:43
paulpu:perl -pi -e 's/\d$/0/g 12/30 22:27
paulpu:' 檔名 12/30 22:27
歹勢..可能我舉的例子不好..我是想知道如果硬要$1後接個數字.. 到底應該怎樣寫才對 ※ 編輯: RueyJing 來自: 123.195.169.72 (12/30 23:49) ※ 編輯: RueyJing 來自: 123.195.169.72 (12/30 23:54)
paulpu:二樓三樓其實是一個意思 如果一定要加個數字 可以是一行... 12/31 00:00
paulpu:perl -pi -e 's/(.*)\d/$1ㄎㄎ/g;s/ㄎㄎ$/0/g' 檔名 12/31 00:01
paulpu:perl -pi -e 's/(.*)\d/$1ㄎㄎ/g;s/ㄎㄎ/0/g' 檔名 12/31 00:18
paulpu:好像也沒省到甚麼 12/31 00:18
tkyifang:to snowfly, "%03d" 01/02 22:03
MistQ:${1} 01/02 22:06