Perlでtrim(さらに完全版)

| コメント(0)

perl で trim(完全版)」や「ハッシュ変数に存在しないキーを指定した場合の値は何?」という記事をはてブで拝見しました。Perlでいかにtrimする(前後の空白を取り除く)か、という命題です。しかし、残念なことに、文字コードによってはこれでもまだ完全ではありません。

  • モダンなPerlでは、プログラム内部では文字列の文字コードをUTF-8で扱い、必要に応じて入力時にデコード/出力時にエンコードする方法が一般的です。
  • こうした常套句については、コードスニペットをコピペするより、CPANモジュールを出来るだけ使うと好ましいです。理由は「かなり使えるPerl正規表現のまとめ」の通り。今回の場合、String::Utiltrim()が使えます。

ということで、モダンにtrimする場合には、以下のように書けます。

use strict;
use warnings;

use utf8;

use String::Util qw(trim);
use Test::More;

# half-width space : 半角スペース
is trim(' foo'),  'foo' => 'half prefix';    # 接頭スペース
is trim('bar '),  'bar' => 'half suffix';    # 接尾スペース
is trim(' baz '), 'baz' => 'half circumfix'; # 接周スペース

# full-width space : 全角スペース
is trim(' foo'),   'foo' => 'full prefix';
is trim('bar '),   'bar' => 'full suffix';
is trim(' baz '), 'baz' => 'full circumfix';

# 両対応
is trim('  foo'),    'foo' => 'both prefix';
is trim('bar  '),    'bar' => 'both suffix';
is trim('  baz  '), 'baz' => 'both circumfix';

done_testing();
__END__

use utf8しつつUTF-8でテストスクリプトを保存することで、全角スペースも(trim()の中でも使われている正規表現である)\sに該当するようになります。

実際にアプリケーションで使う場合には、Encodeを使って外から来た文字列はdecode()して、外に出す文字列は(必要に応じて)encode()することになります。出力はアプリ作者側でどうにでも出来るので、特に指定する必要がない場合にはUTF-8のままで問題ないでしょう。日本の携帯電話向けには、Shift-JISなどと適宜変えることになります。入力側はEncode::Guess辺りで日和っておくといい感じです。

勿論、モダンな環境を使えない場合や、CPANモジュールが使えない場合(実際は「だが、私はCPANを使えない!」の通り、あまりないです)も多々あるわけで、そうした場合にはトラックバック先に挙げられているような手法を使うのが良いと思います。他にも、「PerlでTrimする!」という記事もあります。

コメントする

筆者"Gardejo"について

  • Twitter: @gardejo
  • GitHub: gardejo
  • CodeRepos: gardejo
  • CPAN: MORIYA

このサイトについて

Eorzea System Worksは、架空のシステム開発結社です。

FF14.name (FinalFantasyXIV.name)では、アヴァター(プレイヤーキャラクター)の管理システムやイベント出欠・リマインダシステムや、リンクシェル(LS)運営・管理システムやDKPシステムなどを設計・開発・公開する予定です。

関連サイト

関連サイトでは、他にもFF14に関連するサイトをいくつか紹介しています。

リンク, トラックバック歓迎

このブログへのリンク(どのページでも構いません)やトラックバックを歓迎します。

設計・開発・運用の参考にさせていただきますので、コメントもお気軽にお寄せください!

個別の記事に対するご意見などのほか、目安箱もご用意しています。

このブログ記事について

このページは、Gardejoが2009年11月25日 12:30に書いたブログ記事です。

ひとつ前のブログ記事は「Mooseロールに実装したメソッドをmemoizeする方法」です。

次のブログ記事は「Perlクラスのアンロード方法(Class::Unload使用版)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2014年2月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

やや真面目なサイト