Perlは先頭と末尾の空白を削除します(左右の空白文字、空白文字を削除します)。
他のプログラミング言語には、文字列の先頭と末尾からそれぞれスペースとタブを削除する関数ltrimとrtrimがあるものもあります。Perlにはそのような関数はありません。なぜなら、単純な正規表現による置換で十分だからです(ただし、CPANにはそのような関数を実装したモジュールが数多く存在すると思います)。実際、Parkinsonの些細な定理で顕著なテーマになっているほど簡単なことなのだ。
左側仕上げ
ltrim または lstrip は、文字列の左側から空白文字を削除します。
$str =~ s/^\s+//;
文字列^の先頭から1文字以上の空白文字( \s+ )にマッチし、空白文字に置き換えます。
右側照合順序
rtrim または rstrip は、文字列の右側から空白文字を削除します。
$str =~ s/\s+$//;
文字列の末尾($)までの空白文字( \s+ )にマッチし、NULL文字に置き換えます。
両端を片付ける
は、文字列の両端から空白文字を削除します。
$str =~ s/^\s+|\s+$/g
上の2つの正規表現をor記法|で連結し、最後に/gをつけると、グローバルに(複数回)置換操作を行うことができます。
関数でラップする
これらの構造をコードで見たくない場合は、これらの関数をコードに追加してください。
sub ltrim { my $s = shift; $s =~ s/^\s+//; return $s };
sub rtrim { my $s = shift; $s =~ s/\s+$//; return $s };
sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s };
このように使用します。
my $z = " abc ";
printf "<%s>\n", trim($z); # <abc>
printf "<%s>\n", ltrim($z); # <abc >
printf "<%s>\n", rtrim($z); # < abc >
String::Util
文字列::ユーティリティ
どうしてもコピーしたくないなら、モジュールをインストールすればいい。
例えば、String::Utilにはtrimという関数があり、以下のように使うことができます。
use String::Util qw(trim);
my $z = " abc ";
printf "<%s>\n", trim( $z ); # <abc>
printf "<%s>\n", trim( $z, right => 0 ); # <abc >
printf "<%s>\n", trim( $z, left => 0 ); # < abc >
デフォルトでは辺を照合してくれるので、パラメータを用意する必要はありません。ltrimとrtrimは自分で実装した方がわかりやすいと思います。
テキスト::トリム
もうひとつのモジュール、Text::Trimは3つの機能を提供しますが、ちょっと危険なほど、極端にPerl風の書き方をしていますね。
これを呼び出して、print文の中で戻り値を使ったり、変数に代入すると、照合済みの文字列が返され、元の文字列は変更されないままです。
use Text::Trim qw(trim);
my $z = " abc ";
printf "<%s>\n", trim($z); # <abc>
printf "<%s>\n", $z; # < abc >
一方、空白のコンテキストで、つまり戻り値なしで呼び出すと、trim関数は引数を変更し、chompのような挙動をします。
use Text::Trim qw(trim);
my $z = " abc ";
trim $z;
printf "<%s>\n", $z; # <abc>
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Perl学習チュートリアル - シングルラインコマンドの説明
-
Perlの1行コメントと複数行コメントの構文
-
Perlの配列ソート学習ノート
-
Windows の Thumbs.db から画像キャッシュのサムネイルを削除する Perl
-
長さを指定し、ランダムなDNA配列を生成するperlスクリプトコード
-
perl変数$/の使用方法について説明します。コンテキストが行モードのとき、$/は行を区別するものを定義します。
-
perlの尖ったブラケット演算子(<>)について
-
[解決済み] Perlで2つの文字列を比較するにはどうしたらいいですか?
-
[解決済み] Perlからsedを使うには?
-
[解決済み] Perlで強制的にフラッシュ出力することはできますか?