2011-08-04 4 views
4

私は現在、従来のPerlコードのセクションを高速化しようとして、文字列ベースの操作をしようとしています。オリジナルのPerlコードがCで文字列Perl SVを操作する

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

のように見える私はPerlのガッツのAPIを見てきたし、私がtoUPPER()を使ってこれを実現できるようですが、これは一度に一つの文字に取り組んでいます。私はどのようにあなたがバッキング文字の配列をループすることができないか分かりません。各文字を大文字にして&を新しいSVに割り当てます。

ご迷惑をおかけして申し訳ありません。

+2

'toUPPER'は' uc'のようにUnicode(と異なるロケール)を扱いますか? 'uc'への一回の呼び出しが本当にあなたのアプリケーションのボトルネックであることを強く証明していますか? (私はそれがループになるかもしれないと思うが、スピードアップのためにできることが多くあると正直に疑う。) –

+0

ボトルネックの原因となっているより大きな問題を大規模に単純化し、純粋な可能な限りペール。問題の要点は、私の再実装がストリング(SV)のスタックを反復し、 '-'を取り除き、すべての文字を大文字に変換する必要があるループになったことです。これは 'tr/a-z \ 055/A-Z/d'を使ってPerlで行われました。 SV内のすべての文字を繰り返し処理し、検出された場合は '-'を削除し、すべての文字を' toUPPER() 'で削除する方がCで意味があるようです。私はちょうどそれを行う手掛かりがありません:) – andeyatz

答えて

2

PerlはCレベルの拡張機能に多くの機能を提供していませんが、大文字は明らかにこれらの機能の1つです。最高で、あなたはコアimplementsがどのようにこれを見ることができますが、それは本当に美しいものではありません。

+0

ZOMG!それはまさに私が探していた例でしたが、私はPerl関数がどこにコード化されているのか分かりませんでした。ありがとう@ leon-timmermans – andeyatz