2011-08-04 74 views
4

我目前正試圖做一些基於字符串的操作,試圖加快傳統Perl代碼的一部分。原來的Perl代碼看起來像操縱C中的字符串Perl SVs

my $value = 'abCdE'; 
my $uc_value = uc($value); 

我看Perl的膽量API,似乎我可以用這個實現toUPPER()但這種工作在一個單個字符在一個時間。我似乎錯過了如何循環支持字符數組,每個字母大寫&然後將它分配到一個新的SV。

任何幫助,非常感謝。

+2

'toUPPER'會以'uc'的方式處理Unicode(和不同的語言環境)嗎?你有沒有確鑿的證據表明一次調用'uc'確實是你的應用程序的瓶頸? (我想它可能會在一個循環中,但我真的懷疑你可以做很多事情來加速它。) –

+0

因此,我做了一個大規模簡化手頭上的大問題,這是造成一個瓶頸&已經在純 - 儘可能多的祕密。問題的關鍵是我的重新實現已經歸結爲一個循環,我需要遍歷一堆字符串(SV),刪除'-'並將所有字符轉換爲大寫。這是在Perl中使用'tr/a-z \ 055/A-Z/d'完成的。在C中迭代遍歷SV中的所有字符似乎更有意義,如果檢測到'-'和'toUPPER()'全部字符,則刪除'-'。我只是沒有線索怎麼做:) – andeyatz

回答

2

Perl並沒有爲C級別的擴展提供很多功能,大容量顯然是這些功能之一。充其量,你可以看看核心implements這個,但它確實不是那麼漂亮。

+0

ZOMG!這正是我正在尋找的例子,但我無法找到Perl函數編碼的位置。謝謝@ leon-timmermans – andeyatz