1. ホーム
  2. スクリプト・コラム
  3. パール

perlの文字列操作関数chompとchopの紹介

2022-01-28 15:24:52

チョップ チョップ は、どちらも文字列変数から末尾の文字を削除するために使用されますが、それぞれ違いがあります。

chomp関数は、文字列を格納した変数に対して動作します。文字列の末尾に改行文字がある場合、chompはそれを削除することができます。次の例のように、基本的にできることはこれだけである。

コピーコード コードは以下の通りです。

$text="alineoftext\n "; # can also be entered by <STDIN>
chomp($text); #Remove the newline character (\n).

非常に便利な機能で、基本的にどのプログラムでも使用することができます。ご存知のように、これは文字列の末尾にある改行を取り除くのに最適な方法です。Perlの基本原則に基づけば、変数を使う必要があるところでは、代わりに代入式を使えばいいのです。Chompを使うにはもっと簡単な方法があります。Perlはまず代入操作を行い、それから変数を使用します。ですから、chompの最も一般的な使い方は、次のようになります。
コピーコード コードは以下の通りです。

chomp($text=<STDIN>); # read in but without line breaks
$text=<STDIN>;
chomp($text);

#Same as above, but done in two steps


一見すると、最初の組み合わせの方が複雑に見えます。行を読んでからチョンプするという2段階の操作として見れば、2つのステートメントとして書く方が自然に見えます。行を読んで改行を含まない1つの操作と考えれば、1つのステートメントとして書く方が適切でしょう。ほとんどのPerlプログラマは最初の方法を使っているので、あなたもそれを使うべきです。

chompは関数です。関数である以上、削除した文字の数を戻り値として持っています。この数値は基本的に意味がありません。

コピーコード コードは以下の通りです。

$food=<STDIN>;
$betty=chomp($food); #Get the value 1

上記のように、chompを使用する際には括弧()を使用する場合としない場合があります。これもPerlの一般的なルールで、括弧は削除したときに意味が変わらない限り、省略することができます。末尾に2つ以上の改行がある場合、chompは1つだけを削除する。これは1行ずつ読み込むときには起こりませんが、入力区切り文字 ($/) (これは改行ではありません (\n)) や読み取り関数、いくつかの文字列を組み合わせることによって起こる可能性があります。

Perlのプログラムコードを書いていると、おそらく、<>入力改行 "\n" を削除するために chop() 関数を使うこともあれば、chomp() 関数を使うこともあるかと思います。実は、上記の使い方は、どれも期待する効果を得ることができますが、微妙な違いもあるのです。
chop()関数は、最後の1文字を削除するだけです。
chomp()関数は、最後の文字が" \n" かどうかを判断してから削除する必要があるのです。

chop関数は、文字列変数の最後の文字を切り刻み、切り刻んだ文字を返します。chop関数は文字列の中に何があっても短く切りますが、chomp関数はもう少し選択的に切ります。直接量を切り刻むことはできず、変数のみを切り刻むことができます。
使用方法

コピーコード コードは以下の通りです。

chop VARIABLE
chop LIST
chop


LIST変数の列をchopすると、リスト内の各文字列がトリミングされます:。
コピーコード コードは以下の通りです。

@lines=`cat myfile`;
chop @lines;

最も一般的なケースでは、チョップはsubstrで表現することができます。
コピーコード コードは以下の通りです。

$last_char = chop($var);
$last_char = substr($var, -1, 1, ""); # same as above

次の完全な例をもう一度見てください。
コピーコード コードは以下の通りです。

#! /usr/bin/perl
$string1 = "This is test";
$retval = chop( $string1 );
print " Choped String is : $string1\n";
print " Character removed : $retval\n";

結果

コピーコード コードは以下の通りです。

Choped String is : This is tes
Number of characters removed : t