• 締切済み

関数chop

chopは文字列の最後の部分を削除するとありますが 文字列「あいうえお」があるとしてchop関数を使うと「あいうえ」となるのでしょうか。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> 文字列「あいうえお」があるとしてchop関数を使うと「あいうえ」となるのでしょうか。 Perlのバージョンと、状況とによります。 5.8.0 以降で、マルチバイト文字の一文字をきちんと認識するように なっていれば、"あいうえお" を chop すると きちんと "あいうえ" になります。 一番簡単な例だとこんな感じです。 use strict; use warnings; use encoding 'sjis'; my $str = 'あいうえお'; print $str, '→'; chop $str; print $str, "(", join(':', unpack('H2'x (length($str)*3), $str)), ")\n"; 実行結果: あいうえお→あいうえ(e3:81:82:e3:81:84:e3:81:86:e3:81:88) ちなみに use encoding 'sjis'; の行をコメントアウトすると出力は あいうえお→あいうえ・82:a0:82:a2:82:a4:82:a6:82::::::::::::::::::) のようになります。 この場合は、一文字を正しく認識していないので、'お'の後ろ半分を ぶった切ってしまっています。

回答No.1

文字列の最後尾の1バイトを削除します。 通常は文字列の最後尾の改行コードを取り除くのに使いますが、改行コードが入っていないと、最後の1バイトを削除します。通常2バイトで1文字の日本語の文字列でこれをやられると、改行コードの入っていない場合には最後の1文字が文字化けします。 chopよりもchompを使う方が安全です。

関連するQ&A