アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

文字列の最後尾の1バイトを削除します。



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

chopよりもchompを使う方が安全です。
    • good
    • 0

> 文字列「あいうえお」があるとして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::::::::::::::::::)

のようになります。
この場合は、一文字を正しく認識していないので、'お'の後ろ半分を
ぶった切ってしまっています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!