這案子後期用Perl機會難得的多,就出個Java的跨行比對的Perl版。第一步,Java將javaue.def檔案內容轉成一個String,Perl如法泡製更簡單,因為不太用,不得其法:
一般是@lines = <F>;來將檔案內容全存進陣列變數,若是$line = <F>則只存第一列。而想$line涵蓋檔案內容,必須先執行undef $/;才行。$/是換行變數,預設是\n,可以改變它為其它字符,而undef它表示使用鑽石符號<>不必分列讀進,一口氣英文…不,一口氣讀進變數。
第二,比對出多個符合pattern,我竟沒Java熟,但真的有比Java簡單,一直以為是帶gm參數,g是全域,m是多列,但真正的是gs,s是把\n也當成小數點(任意字元),所以第一行的Definition for table可以比對下N行的End of definition。以下飯粒有標紅字是這兩大重點。
#!/usr/bin/perl undef $/; while ($ctx =~ /(Definition for table .*?End of definition)/gs) { |
全站熱搜